| 发表于:2007-07-19 15:27:29 楼主 |
问题描述:我创建了一dll工程,需要在dll中创建一个窗口,然后实现其窗口消息处理。用initmsgwindow注册窗口类、创建窗口,经过调试,创建窗口成功(g_wndmsg不为空,getlasterror返回0)。在窗口消息处理函数mywinproc中需要对自定义消息scs_msg_dvbdata等做处理。在dll导出函数中模拟了一个函数myfun,不断向窗口发送自定义消息和wm_timer消息。可是问题出来了,为何在调试过程中mywinproc函数不响应呢?或者说窗口捕获不到任何消息了。请高手指教!急!! hwnd g_wndmsg;//用于保存消息窗口的句柄 bool initmsgwindow() { //注册消息处理窗口类 wndclass wc; wc.style = cs_noclose ¦cs_hredraw ¦ cs_vredraw; //窗口类型 wc.lpfnwndproc = (wndproc)mywinproc; //消息处理的回调函数 wc.cbclsextra = 0; wc.cbwndextra = 0; wc.hinstance = afxgetapp()-> m_hinstance; wc.hicon = null; wc.hcursor = null; wc.hbrbackground = (hbrush )getstockobject(black_brush); wc.lpszmenuname = null; wc.lpszclassname = "msgwindow "; if (!::registerclass(&wc)) return false; //创建消息处理窗口 g_wndmsg = ::createwindow( "msgwindow ", " ",ws_overlappedwindow,0,0,50,50,null,null,afxgetapp()-> m_hinstance,null); long err = ::getlasterror(); if(!g_wndmsg) return false; } //窗口消息处理函数 lresult callback mywinproc( hwnd hwnd, uint message, wparam wparam, lparam lparam ) { switch(message) { case scs_msg_dvbdata: { break; } default: return defwindowproc(hwnd,message,wparam,lparam); } return 0; } } //dll导出函数: void myfun() { for(int i=0;i <100;i++){ postmessage(g_wndmsg,scs_msg_dvbdata,null,null); postmessage(g_wndmsg,wm_timer,null,null); } } |
|
|
|
|