您的位置:程序门 -> vc/mfc -> 进程/线程/dll



dll中创建窗口,实现窗口消息处理


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


dll中创建窗口,实现窗口消息处理
发表于: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);
        }
}
发表于:2007-07-19 15:36:241楼 得分:0
消息循环在哪儿?
发表于:2007-07-19 15:38:172楼 得分:0
up,就在mywinproc里啊。不对嘛?
发表于:2007-07-19 15:59:353楼 得分:0
先寒一个。
mywinproc是消息处理函数。
消息循环是
while   (   getmessage(0,   0,   0,   &msg)   )   {
      dispatchmessage(&msg);
}
这样的东东。必须在创建了窗口后就开始消息循环。
发表于:2007-07-19 16:02:294楼 得分:0
我是新手,请多指教。
发表于:2007-07-19 16:08:245楼 得分:0
回复在你另一个贴子里。
建议你先看一下《windows程序设计》特别要搞清楚消息机制这一部分。非常重要。
发表于:2007-07-19 16:45:286楼 得分:0
pass


快速检索

最新资讯
热门点击