鼠标消息不响应
时间:2011-12-08
来源:互联网
结果:上面的过程都实现了,不过主对话框上的按钮鼠标单击的时候无法响应,仅点在按钮上面的文字的时候才响应。比如说有个按钮是OK,点在"OK"这两个字符上才能响应,除这两个字符外都无法响应。我的代码如下:
CBackgroundWnd.h
C/C++ code
#pragma once // CBackgroundWnd class CBackgroundWnd : public CWnd { DECLARE_DYNAMIC(CBackgroundWnd) public: CBackgroundWnd(); virtual ~CBackgroundWnd(); BOOL Create(); void SetBackgroundPic(const WCHAR* sBackgroundPic) { m_sBackgroundPic = sBackgroundPic; } protected: DECLARE_MESSAGE_MAP() const WCHAR* m_sBackgroundPic; public: afx_msg int OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message); afx_msg BOOL OnEraseBkgnd(CDC* pDC); afx_msg void OnPaint(); afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); };
CBackgroundWnd.cpp
C/C++ code
#include "stdafx.h" #include "HomeServerControl.h" #include "BackgroundWnd.h" // CBackgroundWnd IMPLEMENT_DYNAMIC(CBackgroundWnd, CWnd) CBackgroundWnd::CBackgroundWnd() : m_sBackgroundPic(L"") { } CBackgroundWnd::~CBackgroundWnd() { } BEGIN_MESSAGE_MAP(CBackgroundWnd, CWnd) ON_WM_MOUSEACTIVATE() ON_WM_ERASEBKGND() ON_WM_PAINT() ON_WM_CTLCOLOR() ON_WM_NCHITTEST() END_MESSAGE_MAP() // CBackgroundWnd 消息处理程序 BOOL CBackgroundWnd::Create() { // TODO: 在此添加专用代码和/或调用基类 //注册窗口类 CString className; try { className = AfxRegisterWndClass(NULL); } catch(CResourceException* pEx) { pEx->Delete(); return false; } //创建窗口 //设置为工具窗口可以使背景窗口不显示在任务栏中 if(!CreateEx(WS_EX_TOOLWINDOW, className, NULL, WS_POPUP, 0, 0, 1, 1, NULL, NULL)) return false; return true; // return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext); } int CBackgroundWnd::OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message) { // TODO: 在此添加消息处理程序代码和/或调用默认值 //屏蔽鼠标激活 //背景窗口位于主窗口下方,不能被激活 // return MA_NOACTIVATE; return MA_NOACTIVATEANDEAT; // return CWnd::OnMouseActivate(pDesktopWnd, nHitTest, message); } BOOL CBackgroundWnd::OnEraseBkgnd(CDC* pDC) { // TODO: 在此添加消息处理程序代码和/或调用默认值 /* if (wcslen(m_sBackgroundPic) == 0) { return CWnd::OnEraseBkgnd(pDC); } Image img(m_sBackgroundPic); Bitmap bitmap(img.GetWidth(), img.GetHeight()); Graphics graphics(&bitmap); Graphics graphicsDisplay(pDC->m_hDC); graphics.DrawImage(&img, 0, 0, img.GetWidth(), img.GetHeight()); // 把缓冲区内容搬到前台显示 graphicsDisplay.DrawImage(&bitmap, 0, 0, img.GetWidth(), img.GetHeight()); */ /* CRect rect; GetClientRect(&rect); //加载背景位图 CBitmap bitmap; bitmap.LoadBitmap(m_nBackgroundID); //创建内存DC CDC dc; dc.CreateCompatibleDC(pDC); //选择位图 CBitmap* pOldBitmap=dc.SelectObject(&bitmap); //绘制位图 pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dc,0,0,SRCCOPY); //恢复原有位图 dc.SelectObject(pOldBitmap); */ // return TRUE; return CWnd::OnEraseBkgnd(pDC); } void CBackgroundWnd::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: 在此处添加消息处理程序代码 // 不为绘图消息调用 CWnd::OnPaint() Image img(m_sBackgroundPic); Bitmap bitmap(img.GetWidth(), img.GetHeight()); Graphics graphics(&bitmap); Graphics graphicsDisplay(dc.m_hDC); graphics.DrawImage(&img, 0, 0, img.GetWidth(), img.GetHeight()); // 把缓冲区内容搬到前台显示 graphicsDisplay.DrawImage(&bitmap, 0, 0, img.GetWidth(), img.GetHeight()); } HBRUSH CBackgroundWnd::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CWnd::OnCtlColor(pDC, pWnd, nCtlColor); // TODO: 在此更改 DC 的任何属性 // TODO: 如果默认的不是所需画笔,则返回另一个画笔 return hbr; }
主对话框的调用:
C/C++ code
void CSetupInti::DrawBackground() { m_backgroundWnd.SetBackgroundPic(Constant::sInstallerBackground1); //设置分层窗口 LONG style=::GetWindowLong(GetSafeHwnd(),GWL_EXSTYLE); style|=WS_EX_LAYERED; style=::SetWindowLong(GetSafeHwnd(),GWL_EXSTYLE,style); style=::GetWindowLong(GetSafeHwnd(),GWL_EXSTYLE); //获得窗口默认背景色 COLORREF bkColor=::GetSysColor(COLOR_3DFACE); //设置分层窗口属性 SetLayeredWindowAttributes(bkColor, 100, LWA_COLORKEY); //创建背景窗口 m_backgroundWnd.Create(); }
end:
请大牛指导,谢谢!
作者: shaozg168 发布时间: 2011-12-08
作者: chinatcp 发布时间: 2011-12-08
作者: shaozg168 发布时间: 2011-12-08
作者: linyongzuo 发布时间: 2011-12-08
作者: chinatcp 发布时间: 2011-12-08
点击按钮的代码如下:
C/C++ code
// continue 按钮 void CSetupInti::OnBnClickedNext() { SetNextValue(); ShowDlgByState(); }
作者: shaozg168 发布时间: 2011-12-08
作者: shaozg168 发布时间: 2011-12-08
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28