易码技术论坛

 找回密码
 加入易码
搜索
查看: 263294|回复: 5

一点小问题(VC)

[复制链接]
发表于 2007-6-12 10:49:43 | 显示全部楼层
CWnd* myWnd = new CWnd;
改为:
CWnd* myWnd = new CWnd();
发表于 2007-6-12 15:19:29 | 显示全部楼层
我试了,那样也不行,m_hWnd为NULL不是因为没初始化,而是Greate函数的窗口建立失败导致m_hWnd为NULL.
发表于 2007-6-12 21:26:14 | 显示全部楼层
cwnd的CREATE内部调用了CREATEX来创建窗体,注意CREATE方法只能创建子窗体。
所以建议直接用CREATEEX来创建,更自由些。

下面的代码是MFC中的源码,描述了CREATE方法的实现。
(注意WS_CHILD)

/************************************************/
BOOL CWnd::Create(LPCTSTR lpszClassName,
  LPCTSTR lpszWindowName, DWORD dwStyle,
  const RECT& rect,
  CWnd* pParentWnd, UINT nID,
  CCreateContext* pContext)
{
  // can't use for desktop or pop-up windows (use CreateEx instead)
  ASSERT(pParentWnd != NULL);
  ASSERT((dwStyle & WS_POPUP) == 0);

  return CreateEx(0, lpszClassName, lpszWindowName,
    dwStyle | WS_CHILD,
    rect.left, rect.top,
    rect.right - rect.left, rect.bottom - rect.top,
    pParentWnd->GetSafeHwnd(), (HMENU)(UINT_PTR)nID, (LPVOID)pContext);
}
 楼主| 发表于 2007-6-13 11:01:03 | 显示全部楼层
GetLastError看了下,果然是Create函数Failed,原因是参数中lpClassName不是可以随便设定的,必须是已经注册过的。
发表于 2007-6-13 16:06:12 | 显示全部楼层
如果是独立的窗口,LZ试试CFrameWnd.
 楼主| 发表于 2007-6-11 11:50:00 | 显示全部楼层 |阅读模式
这段代码总是出异常:
  1. CWnd* myWnd = new CWnd;
  2. myWnd->Create(...); //参数省略
  3. myWnd->ShowWindow(SW_NORMAL);
复制代码
跟踪发现,异常是第二句引起的,虽然myWnd不是NULL,但myWnd的HWND为NULL。
怎么改?
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-4-26 21:29 , Processed in 0.021715 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表