我只是想知道该怎么做。 我写道:
CEdit m_wndEdit;
并在按钮事件处理程序(对话框应用程序)中, 我写道:
m_wndEdit.Create(//with params);
但我仍然没有看到控件出现在用户界面中。
我实际上是在按钮处理程序中写的:
CWnd* pWnd = GetDlgItem(IDC_LIST1);
CRect rect;
pWnd->GetClientRect(&rect);
//pWnd->CalcWindowRect(rect,CWnd::adjustBorder);
wnd_Edit.Create(ES_MULTILINE | ES_NOHIDESEL | ES_READONLY,rect,this,105);
wnd_Edit.ShowWindow(SW_SHOW);
this->Invalidate();
id 105
不存在。 (我在Create
的{{1}}成员函数中使用它。我只是把它放在那里。它不应该是你想给新控件的id吗?它应该已经存在吗?
答案 0 :(得分:4)
使用MSDN中提到的示例检查以下标志集:
pEdit->Create(ES_MULTILINE | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER | ES_NOHIDESEL | ES_READONLY,
rect, this, 105);
答案 1 :(得分:4)
无需使用Invalidate()
将WS_VISIBLE标志添加到您的创建标志,您不需要ShowWindow
您正在IDC_LIST1所在的位置创建按钮 - 您可能希望在GetClientRect()之后执行pWdn-> Destroy()
您传递给Create()的ID可以是任何内容,当然如果您想要稍后处理来自此按钮的消息,则需要使用正确的ID。在这种情况下,最简单的方法是在resource.h中手动添加一个条目。
“我把这段代码放在按钮事件处理程序中”是什么意思 - 哪个按钮?与你想要创作的那个不同,我可能希望?您的代码是否完全被调用,当您放入断点时是否会停止?调用Create()后wnd_Edit-> m_hWnd的值是多少?
wnd_Edit是对话框的成员,对,而不是函数局部变量?
答案 2 :(得分:0)
wnd_Edit究竟是什么?如果它是该函数中的局部变量,则可能是问题所在。 CWnd析构函数破坏与CWnd关联的窗口。因此,当wnd_Edit超出范围时,编辑框也会被销毁。 如果不是这样,请检查Create()的返回值。它是NULL吗?如果是,请检查GetLastError()的值。