我的问题是: 需要做什么才能在带有标题的子窗口中进行功能编辑控制?
我一直在为Win32开发一个包装器并遇到了一些麻烦。 带有子标题窗口的重叠Windows似乎无法完全激活或获得焦点。也许是因为缺少焦点,儿童字幕窗口中的编辑控件将无法正常工作。
隔离我的错误的实验如下:
观察结果符合我的包装项目: 子窗口可以根据样式位移动和调整大小。 在被选中时,其标题不会改变颜色以暗示它是焦点。 “编辑”控件不响应单击。没有插入符号。 子窗口中的按钮控件正常响应。
此外, 从子窗口中删除标题允许编辑控件正确地进行交互。
这是测试代码:
// Create a WNDCLASSEX for registering windows
WNDCLASSEX wndclass;
ZeroMemory(&wndclass, sizeof(WNDCLASSEX));
wndclass.cbSize = sizeof(WNDCLASSEX);
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = L"MyTestClassForText";
// Check for register problem
if (!RegisterClassEx(&wndclass))
{
MessageBox( NULL , L"Window Couldn't be Created" , L"Error" , MB_OK );
return false;
}
// Create a child window to the main window and put an edit contol inside. What happends?
HWND parWnd = CreateWindowEx( NULL , L"MyTestClassForText" , L"Parent Window" , WS_OVERLAPPEDWINDOW | WS_VISIBLE ,0 ,0 ,340 ,240 , NULL , NULL , hInstance , NULL );
HWND childWnd = CreateWindowEx( NULL , L"MyTestClassForText" , L"Child Window" , WS_CHILDWINDOW | WS_VISIBLE | WS_OVERLAPPEDWINDOW ,0 ,0 ,300 ,200 , parWnd , NULL , hInstance , NULL );
HWND editWnd = CreateWindowEx( WS_EX_CLIENTEDGE , L"EDIT" , L"Try To Edit This." , WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL ,4 ,4 ,270 ,40 , childWnd , NULL , hInstance , NULL );
HWND buttonWnd = CreateWindowEx( NULL , L"BUTTON" , L"This Works" , WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON ,4 ,52 ,100 ,30 , childWnd , NULL , hInstance , NULL );
您可以假设在所提到的WndProc中充分使用了Windows默认进程,并且整个程序中的hInstance是一致的。将子窗口中的样式标志从WS_OVERLAPPEDWINDOW更改为WS_CAPTION会导致同样的问题。
我知道直接在另一个窗口中有一个窗口是不正常的,但它应该是可能的。
非常感谢您的帮助和考虑,
迦勒