MFC美化

 

(一)重载OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 一般用在对话框上的控件美化,在对话框上的空间显示或者更新之前调用这个消息响应函数。

 

(二)OnEraseBkgnd(CDC* pDC)檫除背景函数,最后要return true 否则接着就会调用ondraw进行重绘了。

这个函数一般用于增加背景图片,比ondraw里面快

(三) 动态创建控件,一般是动态创建按钮,静态框,对话框 方法都是调用基类的Create函数

(四) 自己创建继承控件例如 CXPButton继承自Cbutton 然后使用之。、

重要函数:

GetWindowDC : 获得的设备环境覆盖了整个窗口(包括非客户区),例如标题栏、菜单、滚动条,以及边框。这使得程序能够在非客户区域实现自定义图形,例如自定义标题或者边框。和GetDc

进行比较把

ON_WM_NCMOUSEMOVE:非客户区鼠标移动消息。对应于客户区鼠标移动消息。

DefWindowProc:如果在WindowProc中没有结束消息,则这个函数可以捕获所有消息。包括命令,通告,用户消息。。。。

 

DrawItem() 该函数的作用就是绘制控件在各种状态下的外观。但是之前我们必须设置控件为Owner Draw的属性,只有这样在每次重绘之前才会调用DrawItem()。但是如果我们是在创建控件之前就想控件具有重绘功能,就要调用PreSubclassWindow()函数,在该函数中完成属性值的设置。

 

BOOL SubclassDlgItem( UINT nID, CWnd* pParent );和 SubclassWindow( HWND hWnd );  这2个函数的作用是子类化,即将当前窗口的句柄(hWnd)赋给一个新类,并且修改当前窗口对应的窗口处理函数。例如我们在对话框上新建一个控件Cedit ,并且我们从Cedit派生一个类CMYEdit的实例m_edit ,然后调用m_edit.SubclassDlgItem(IDC_EDIT1,this); 这样我们的派生类就可以处理Cedit控件ID为IDC_EDIT1的消息了。详见 http://dev.csdn.net/develop/article/15/15922.shtm
http://www.cnitblog.com/sonery/archive/2007/12/08/37484.html
 
BOOL TrackMouseEvent(LPTRACKMOUSEEVENT lpEventTrack ); 鼠标跟踪事件(进入窗口,离开窗口),LPTRACKMOUSEEVENT的一个参数可以设置要跟踪的窗口句柄。一般为一个控件,例如按钮,当我们鼠标进入离开按钮时候就会分别触发
afx_msg LRESULT OnMouseLeave(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnMouseHover(WPARAM wParam, LPARAM lParam);
这2个消息了。
 
CWinApp::PreTranslateMessage 重载该函数可以实现窗口消息在派发给窗口函数TrnaslateMessageDispatchMessae()之前的过滤.缺省的实现是完成加速键的翻译.因为您必须在你的重载版本中调用CWinApp:PreTranslateMessage()函数.很显然,SDK中在TranslateMassage()函数之前来实现该功能.。。通过重载这个函数,我们可以改变MFC的消息控制流程,甚至可以作一个全新的控制流出来。只有穿过消息队列的消息才受PreTranslateMessage()影响,采用SendMessage()或其他类似的方式向窗口直接发送的而不经过消息队列的消息根本不会理睬PreTranslateMessage()的存在。
原文地址:https://www.cnblogs.com/SuperXJ/p/1575263.html