windows有个消息叫“WM_CTLCOLORSTATIC”,一个控件准备绘制的时候向父窗口发此消息,父窗口可以通过处理这个消息改变此控件的字体和颜色等当父窗口的消息处理函数在处理完毕后,会return一个brush句柄。现在问题来了:我hook了这个消息,也就是这个消息由我的callback函数来处理了,并不由父窗口的消息函数来处理了,我如何“返回”这个brush?如果我不能正确“返回”这个brush,绘制是不正常的。另外:我不想修改父窗口的消息处理函数,我想我根本不用关心父窗口如何,否则我就不要hook这个消息了。
解决方案 »
- 同一句SQL语句,在ACCESS数据库里可执行在MFC里面报错
- 软件中试用了mscomm,windows media player,flexgrid等控件,在发布时是不是都得注册啊
- 关于VC中的消息映射机制与回调的关系
- 出现这样的编译错误怎么解决?问题出在什么地方?
- 用什么函数能知道线程已经退出(在线)
- 在线求教:CDC画出的线,怎么设置undo键来恢复到上一次画的界面?
- 请问谁可以回答我的问题?大家来帮帮我吧!
- CFile::Remove与file.Remove
- 如何用vc设置通过代理服务器打开网页???十万火急!!!
- 我想知道VC中消息处理的顺序
- 如何修改单文档界面左上角的名称
- Cstring到unsigned short*转换的问题
如果是标准的HOOK.你又不想处理.直接调用下一个HOOK就行了.
如果你想自己处理,直接返回一个HBRUSH就行了.
会有什么问题???
hook = SetWindowsHookEx(WH_CALLWNDPROC, CallWndProc, NULL, GetCurrentThreadId());
LRESULT CALLBACK CallWndProc(int code, WPARAM wParam, LPARAM lParam)
{
CWPSTRUCT *pMsg= (CWPSTRUCT *)lParam;
if(pMsg->message==WM_CTLCOLORSTATIC)
{
//Blah blah blah...
return GetStockObject(NULL_BRUSH); //No effort here
}
return CallNextHookEx(hook, code, wParam, lParam);
}
知道NULL_BRUSH是什么意思吗?自己创建一个别的BRUSH试试
SetWindowsHookEx可以得到消息和返回值,但不能修改,传给Hook函数的结构看起来是“单向值传递”。