求助:对话框里放一个CWnd,Cwnd里放一个CStatic,为什么显示不了?

paladin1893 2011-03-12 02:52:17
MFC的SDI工程里添加了一个对话框资源,派生了一个给予CDialog的类,头文件里加了下述变量
public:
CWnd m_MyWnd;
CStatic m_MyStatic;
添加了方法OnInitDialog()
BOOL CDialogContainer::OnInitDialog()
{
CDialog::OnInitDialog();

// TODO: 在此添加额外的初始化

m_MyWnd.Create(_T(""),_T(""),WS_CHILD|WS_VISIBLE,CRect(4,4,320,80),this,IDC_DLGCONTAIN_WND,NULL);

m_MyStatic.Create(_T("测试测试"),WS_CHILD|WS_VISIBLE,CRect(8,8,208,36),&m_MyWnd,IDC_DLGCONTAIN_STATIC);

return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}
菜单事件为
void CDialogTestView::OnMenuDlgtest()
{
// TODO: 在此添加命令处理程序代码
CDialogContainer dlg;
dlg.DoModal();
}
为啥弹出的对话框啥也见不到?
...全文
122 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2011-04-04
  • 打赏
  • 举报
回复
您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面界面版关于版主结帖工作的具体办法
Eleven 2011-03-13
  • 打赏
  • 举报
回复
Debug下调试一下CDialogTestView类的初始化函数的部分,看看函数执行的情况
_Sodo_ 2011-03-13
  • 打赏
  • 举报
回复
自定义控件在和CStatic控件在同一个区域的话,自定义控件会盖住CStatic控件,就会出现你所说的不显示的问题,需要调整一下它们的Z序。

//初始化的时候设最上面就可以了,或者把自定义控件透明
GetDlgItem(IDC_CStatic)->SetWindowPos(&wndTop,0,0,0,0,SWP_NOSIZE | SWP_NOMOVE);
Dnkuni 2011-03-13
  • 打赏
  • 举报
回复
m_MyWnd.Create(_T(""),_T(""),WS_CHILD|WS_VISIBLE,CRect(4,4,320,80),this,IDC_DLGCONTAIN_WND,NULL);
第一个参数应该是窗口类名吧
paladin1893 2011-03-12
  • 打赏
  • 举报
回复
谢谢楼上各位,找了下资料,发现自己想要的效果其实就是Custom Control的效果,加上如下代码即可
BOOL CMyWnd::RegisterWindowClass(void)
{
WNDCLASS wndcls;
HINSTANCE hInst = AfxGetInstanceHandle();

if (!(::GetClassInfo(hInst, MyWnd_ClassName, &wndcls)))
{
// otherwise we need to register a new class
wndcls.style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;
wndcls.lpfnWndProc = ::DefWindowProc;
wndcls.cbClsExtra = wndcls.cbWndExtra = 0;
wndcls.hInstance = hInst;
wndcls.hIcon = NULL;
wndcls.hCursor = AfxGetApp()->LoadStandardCursor(IDC_ARROW);
wndcls.hbrBackground = (HBRUSH) (COLOR_3DFACE + 1);
wndcls.lpszMenuName = NULL;
wndcls.lpszClassName = MyWnd_ClassName;

if (!AfxRegisterClass(&wndcls))
{
AfxThrowResourceException();
return FALSE;
}
}

return TRUE;
}
singwhatiwanna 2011-03-12
  • 打赏
  • 举报
回复
注意static和cwnd的位置关系,位置不对会显示了你也看不见。
paladin1893 2011-03-12
  • 打赏
  • 举报
回复
直接m_MyStatic.Create是没有问题的,用CWnd的目的主要在于作为一个容器当作一个子窗口,里面包含一个CStatic,还可以加上CEdit和CButton,这样的子窗口可以作为一个基本单元,重复出现在对话框里。
向立天 2011-03-12
  • 打赏
  • 举报
回复
你看看这两个create都成功没有
VC天下 2011-03-12
  • 打赏
  • 举报
回复
用CWnd的目的何在?
直接m_MyStatic.Create(_T("测试测试"),WS_CHILD|WS_VISIBLE,CRect(8,8,208,36),this,IDC_DLGCONTAIN_STATIC);

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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