C 更改父控件后控件未正确重绘
可能类似(但也不类似) 我正在尝试创建弹出窗口(如VisualStudio中的可停靠窗格)。我最初创建了一个窗口,其中包括:C 更改父控件后控件未正确重绘,c,winapi,win32gui,C,Winapi,Win32gui,可能类似(但也不类似) 我正在尝试创建弹出窗口(如VisualStudio中的可停靠窗格)。我最初创建了一个窗口,其中包括: CreateWindowEx(NULL, classname, caption, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | extrastyles, 5, 30, 300, 300, hParent, NULL, hInst, NULL); 其中包含一个编辑控件: HWND edittmp =
CreateWindowEx(NULL, classname, caption, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | extrastyles, 5, 30, 300, 300, hParent, NULL, hInst, NULL);
其中包含一个编辑控件:
HWND edittmp = NULL; //Temporary global variable.
case WM_CREATE:
{
CREATESTRUCT* cs = (CREATESTRUCT*)(lParam);
if (!edittmp)
edittmp = CreateWindowEx(WS_EX_CLIENTEDGE, L"EDIT", L"edit control", WS_VISIBLE | WS_CHILD | ES_MULTILINE | WS_VSCROLL, 0, 0, 20, 100, hwnd, (HMENU)IDC_EDIT1, cs->hInstance, 0);
else
SetParent(edittmp, hwnd); //Transfer the controls to the recreated parent window.
break;
}
为了弹出窗口,IPostMessage(hwnd,WM_CLOSE,0,0)
然后使用WS_重叠| WS_弹出窗口
重新创建窗口,因为我知道对于WM_弹出窗口
,必须重新创建窗口
我不销毁控件而只是更改其父控件的方法是,不需要手动尝试保存每个控件中包含的数据(在本例中是编辑控件中包含的文本)。但是,在更改父项后,似乎无法正确绘制编辑控件:
这里可能出了什么问题?很抱歉,我无法根据您的描述构建一个可以重现问题的示例。请您在没有私人信息的情况下进行显示。编辑控件正在向原始父级发送消息,您已将其销毁。您可以做的是将编辑控件包装到另一个本身已重新租用的窗口中。这不会将问题转移到包装窗口吗?是否可以重新配置子窗口以向新的父窗口发送消息?您只需确保编辑窗口的父窗口不会被破坏。在从VS对MFC模板进行一些调查后,MFC似乎使用了包装窗口(以
Afx:ControlBar
的形式)。我已经采用了这种策略,它似乎工作正常!谢谢