你的Button必须有BS_OWNERDRAW这个风格才可以的。
解决方案 »
- toolbar中,按钮弄多了,怎么删除呢?(有图)
- 如何从字体文件中提取某个字符的索引??
- 单文档里,以editview为基类分割的两个窗口怎样保持它们的相对比例大小不变?
- 奇怪的现象,程序在本机可以运行,在其他机器上则出现14007的错误,苦恼, GetLastError() = 14007 //在活动的激活上下文中没有找到任何查找密钥, 怎么解决??
- Microsoft Debug 恳请高手帮忙,一个画图的ActiveX,但是只要一有滚动条,ActiveX控件里面就闪烁,怎么去掉这个闪烁,谢谢
- 以MainFrame做父窗口的Dailaog,收不到鼠标消息?(续分贴)
- 怎么添加*.lib文件?
- vc、c++ builder、delphi之间的区别
- 一个小问题,在线等待!!!!
- 请教高手CRichEditCtrl中文乱码问题。
- 又来打搅,希望高手之高高手回答
- 各位帮忙看看这个链接错误是什么问题啊?????????谢谢!
填充这个结构
至于原理不是很清楚, 期待高手的回答~~~~~DrawItem是否由消息产生?
如果是:
1. 消息的来源
2. 消息的传递
如果不是:
1. 函数传递的过程
A window receives this message through its WindowProc function.
WM_DRAWITEM是系统在控件显示状态改变(focused, active, or disable etc)时发送到父窗口的消息,你的CButton 当然不能自己接受这个消息来进行自绘操作了。你的drawing code应该放在DrawItem(...)函数中,MFC会负责在父窗口接受到WM_DRAWITEM时调用它
"MFC会负责在父窗口接受到WM_DRAWITEM时调用它", 请解释一下这句好吗? 一直把DrawItem追溯到CWnd中, 是通过什么来把这个函数触发的呢? 谢谢~~~~
CControlBar: parent window of the buttonCall stack is the following:CMyButton::DrawItem(tagDRAWITEMSTRUCT * 0x0012f80c) line 37
CButton::OnChildNotify(unsigned int 43, unsigned int 103, long 1243148, long * 0x00000000) line 84
CWnd::SendChildNotifyLastMsg(long * 0x00000000) line 2683
CWnd::ReflectLastMsg(HWND__ * 0x00010a82, long * 0x00000000) line 2721
CWnd::OnDrawItem(int 103, tagDRAWITEMSTRUCT * 0x0012f80c) line 1156 + 14 bytes
CWnd::OnWndMsg(unsigned int 43, unsigned int 103, long 1243148, long * 0x0012f6b4) line 1930
CControlBar::WindowProc(unsigned int 43, unsigned int 103, long 1243760) line 442 + 30 bytes
再请解释, 感激不尽~~~~~
http://www.csdn.net/expert/topic/389/389181.shtm
我不是想知道这个消息是怎么处理的, 而是想知道它是怎么产生的, 就像WM_LBUTTONDOWN是由用户输入产生的, 可是WM_DRAWITEM是怎么产生的呢? 系统怎么样才会知道那个窗口是否要DrawItem??