请教CWnd::CreateEx问题

specialfaint 2011-01-19 04:19:20
请教:
SysTray类是CWnd的派生类:
class SysTray : public CWnd

在该类的createtest函数中,有如下代码:
void SysTray::createtest()
{
HWND hwnd_test = this->GetSafeHwnd();
CWnd *p;
p = CWnd::FromHandle(nid.hWnd);
return;
}

主类中定义了SysTray sysT;对象。并且有如下语句:
sysT.createtest();

在createtest函数中断点,看到this非空,但是,this->GetSafeHwnd()为空,

如果将上面的函数代码增加一行:

void SysTray::createtest()
{
CWnd::CreateEx(0, AfxRegisterWndClass(0), _T(""), WS_POPUP, 0,0,10,10, NULL, 0);
HWND hwnd_test = this->GetSafeHwnd();
CWnd *p;
p = CWnd::FromHandle(nid.hWnd);
return;
}


我在刚才制作系统托盘栏图标的时候,就是因为没有执行CWnd::CreateEx函数,this->GetSafeHwnd()为空,所以SysTray sysT对象收不到消息。现在加上CWnd::CreateEx后,没有问题了。

我的问题是:
1) 执行CWnd::CreateEx函数前后,我的对象SysTray sysT;有什么区别?
2) CWnd::CreateEx函数的作用是什么?

...全文
147 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
dpstill 2011-01-19
  • 打赏
  • 举报
回复
CWnd::CreateEx

BOOL CreateEx(
DWORD dwExStyle,
LPCTSTR lpszClassName,
LPCTSTR lpszWindowName,
DWORD dwStyle,
int x,
int y,
int nWidth,
int nHeight,
HWND hwndParent,
HMENU nIDorHMenu,
LPVOID lpParam = NULL
);

BOOL CreateEx(
DWORD dwExStyle,
LPCTSTR lpszClassName,
LPCTSTR lpszWindowName,
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
UINT nID,
LPVOID lpParam = NULL
);

返回值:如果成功,则返回非零值;否则返回0。

参数: dwExStyle 指定了要创建的CWnd的扩展风格。对窗口应用任何扩展的窗口风格。
lpszClassName 指向一个以null结尾的字符串,命名了Windows的窗口类(一个WNDCLASS结构)。类名可以是用全局函数AfxRegisterWndClass注册的任何名字,或者是任何预定义的控制类名。它不能是NULL。
lpszWindowName 指向一个用null结尾的字符串,包含了窗口的名字。
dwStyle 指定了窗口风格属性。对可能取值的描述参见“窗口风格”和CWnd::Create。
x 指定了CWnd窗口的初始x轴位置。
y 指定了CWnd窗口的初始y轴位置。
nWidth 指定了CWnd窗口的宽度(设备单位)。
nHeight 指定了CWnd窗口的高度(设备单位)。
hwndParent 标识了要创建的CWnd窗口的父窗口或拥有者窗口。对顶层窗口,使用NULL。
nIDorHMenu 标识了菜单或子窗口的标识符。其含义依赖于窗口的风格。
lpParam 指向CREATESTRUCT结构的lpCreateParams字段所代表的数据。
rect 窗口的大小和位置,使用pParentWnd的客户区坐标。
pParentWnd 父窗口。
nID 子窗口的ID。

说明:
这个函数使用dwExStyle所指定的扩展风格创建一个重叠式、弹出式或子窗口。
CreateEx的参数指定了WNDCLASS、窗口标题、窗口风格以及(可选)窗口的初始位置和大小。CreateEx还指定了窗口的父窗口(如果有)和ID。
当CreateEx执行的时候,Windows向窗口发送WM_GETMINMAXINFO、WM_NCCREA_TE、WM_NCCALCSIZE和WM_CREATE消息。
要扩展缺省的消息处理,应从CWnd继承一个类,在新类中加入消息映射,并为以上的消息提供成员函数。例如,可以重载OnCreate为新类提供需要的初始化功能。
重载其它OnMessage消息处理函数,为你的派生类提供进一步的功能。
如果给定了WS_VISIBLE风格,Windows将向窗口发送激活和显示窗口所需的所有消息。如果窗口风格中指定了标题条,则lpszWindowName参数中指定的窗口标题将显示在标题条上。
dwStyle参数可以是窗口风格的任意组合。

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧