Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 更改父控件后控件未正确重绘_C_Winapi_Win32gui - Fatal编程技术网

C 更改父控件后控件未正确重绘

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 =

可能类似(但也不类似)

我正在尝试创建弹出窗口(如VisualStudio中的可停靠窗格)。我最初创建了一个窗口,其中包括:

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;
    }
为了弹出窗口,I
PostMessage(hwnd,WM_CLOSE,0,0)
然后使用
WS_重叠| WS_弹出窗口
重新创建窗口,因为我知道对于
WM_弹出窗口
,必须重新创建窗口

我不销毁控件而只是更改其父控件的方法是,不需要手动尝试保存每个控件中包含的数据(在本例中是编辑控件中包含的文本)。但是,在更改父项后,似乎无法正确绘制编辑控件:


这里可能出了什么问题?

很抱歉,我无法根据您的描述构建一个可以重现问题的示例。请您在没有私人信息的情况下进行显示。编辑控件正在向原始父级发送消息,您已将其销毁。您可以做的是将编辑控件包装到另一个本身已重新租用的窗口中。这不会将问题转移到包装窗口吗?是否可以重新配置子窗口以向新的父窗口发送消息?您只需确保编辑窗口的父窗口不会被破坏。在从VS对MFC模板进行一些调查后,MFC似乎使用了包装窗口(以
Afx:ControlBar
的形式)。我已经采用了这种策略,它似乎工作正常!谢谢