关于DLL中创建窗口,实现消息处理的问题
问题描述:我创建了一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_DVBCFG:
{
break;
}
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);
}
}