您的位置:程序门 -> windows专区 ->



如何给cwnd*指针赋予一个句炳


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


如何给cwnd*指针赋予一个句炳[已结贴,结贴人:yanglilibaobao]
发表于:2007-03-19 14:00:03 楼主
cwnd*和hwnd差别很大      
       
    hwnd是sdk定义的类型,是一个无确切意义的32-bit值,在调用api时用于指代窗体。      
       
    cwnd*是一个有确切意义的指针,指向一个mfc窗体类cwnd的实例。因为mfc对sdk做了封装,大部分调用都可以用cwnd*作为参数,所以很容易混淆。从一个cwnd*获取句柄的方法是pwnd-> getsafehwnd(),他比       pwnd-> m_hwnd安全,因为前者在pwnd       ==       null的时候返回null而后者出现access       violation      
       
    从hwnd转换到   cwnd*   一个可以使用的方法是cwnd::fromhandle      
    cwnd       *ptempwnd       =       cwnd::fromhandle(hwnd);       //       如果       hwnd       存在对应的       cwnd*,则返回其指针,否则,创建一个       mfc       临时窗体并返回其指针。      
      注意这个函数会返回临时窗体的指针,如果需要更安全,调用cwnd::fromhandlepermanent,他在不存在对应的cwnd*时返回null。
      我写了一个类从cwnd派生,名为cmywnd,这里面有我的自定义消息处理函数,我希望能用sendmessage发送消息给cmywnd类对象。如:sendmessage(m_powner-> m_hwnd,   wm_comm_rxchar,   (wparam)   rxbuff,   (lparam)   port-> m_nportnr);
但是cmywnd对象创建后,其成员m_hwnd句柄为null,这样的话就不能sendmessage了,这样的话我应该怎么办。  
我在cmywnd构造函数中强制让类对象指针跟句柄相关联:如:
cmywnd::cmywnd()
{
        //create()
        attach((hwnd)0x1001ffce);
        m_hwnd   =   (hwnd)0x1001ffce;
}
但是这样也不行.
最后上msdn才把问题解决了,因为在创建对像后,还要用create产生窗口,才使句柄有效。然后你就可以在   m_hwnd   中控制它了。
最后就加了一句:
m_mywnd.create(null, "aa ",ws_child,crect(0,0,0,0),this,1,null);就可以了。

chinaunix   blog
发表于:2007-03-20 17:44:031楼 得分:40
学习ing......up
发表于:2007-03-21 09:30:492楼 得分:20
谢谢,接分
发表于:2007-03-22 23:01:473楼 得分:0
路过。。。这个帖子怎么跑这里来了?
发表于:2007-03-23 08:24:364楼 得分:0
是,怎么到这了…………


不过还是顶下…………
发表于:2007-03-23 09:21:245楼 得分:20
yanglilibaobao   ()     好奇怪
发表于:2007-03-28 10:36:236楼 得分:20
3q同时jf


快速检索

最新资讯
热门点击