Почему этот элемент управления редактированием win32 в клиентской области mdi не работает?
У меня есть форма Win32 C++ MDI с панелью инструментов вверху, панелью состояния внизу и элементом управления редактированием, расположенным поверх панели состояния, а остальная часть клиентской области очищена для дочерних окон.
Вот код для создания элемента управления редактированием:
HFONT hfDefault;
HWND hEdit;
TCHAR lpszSometext[] = L"это первая строка в этом элементе управления редактированием "
L"Это вторая строка в этом элементе управления редактированием "
L"это третья строка в этом элементе управления редактированием ";
hEdit = CreateWindowEx(
WS_EX_CLIENTEDGE, Л"РЕДАКТИРОВАТЬ",
НУЛЕВОЙ,
WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | ES_LEFT | ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL,
0, 0, 0, 0,
дескриптор HWND,
(HMENU)IDC_MAIN_EDIT,
GetModuleHandle(NULL),
НУЛЕВОЙ);
if (hEdit == NULL)
MessageBox(hWnd, L"не удалось создать элемент управления редактированием.", L"ошибка", MB_OK | MB_ICONERROR);
SendMessage(hEdit, WM_SETTEXT, 0, (LPARAM)lpszSometext);
hfDefault = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
SendMessage(hEdit, WM_SETFONT, (WPARAM)hfDefault, MAKELPARAM(FALSE, 0));
А это код для изменения размера панели инструментов, панели состояния и элемента управления редактированием в WM_SIZE обратного вызова главного окна;
HWND hToolbar, hStatusbar, hEdit, hMDI;
RECT rcToolbar, rcStatusbar, rclient;
int iToolbarHeight, iStatusbarHeight, iEditHeight, iMDIHeight;
iEditHeight = 60;
hToolbar = GetDlgItem(hWnd, IDC_MAIN_TOOL);
SendMessage(hToolbar, TB_AUTOSIZE, 0, 0);
hStatusbar = GetDlgItem(hWnd, IDC_MAIN_STATUS);
SendMessage(hStatusbar, WM_SIZE, 0, 0);
GetWindowRect(hToolbar, &rcToolbar);
iToolbarHeight = rcToolbar.bottom - rcToolbar.top;
GetWindowRect(hStatusbar, &rcStatusbar);
iStatusbarHeight = rcStatusbar.bottom - rcStatusbar.top;
GetClientRect(hWnd, &rcClient);
iMDIHeight = rcClient.bottom - iToolbarHeight - iStatusbarHeight - iEditHeight;
hEdit = GetDlgItem(hWnd, IDC_MAIN_EDIT);
Setwindowpos и(hEdit, нуль, 0, rcClient.снизу iStatusbarHeight - iEditHeight, rcClient.право, rcClient.снизу iStatusbarHeight, SWP_NOZORDER);
hMDI = GetDlgItem(hWnd, IDC_MAIN_MDI);
SetWindowPos(hMDI, NULL, 0, iToolbarHeight, rcClient.right, iMDIHeight, SWP_NOZORDER);
Все три элемента управления создаются одинаково с помощью CreateWindowEx(), однако текст, помещенный в элемент управления edit при создании, не отображается, и элемент управления edit создает отвратительные артефакты в окне MDI clint всякий раз, когда изменяется размер основной формы, как будто элемент управления edit пытается привязаться к нижней части панели инструментов.
Что я уже пробовал:
Я еще ничего не пробовал, я не могу думать ни о чем другом, кроме как о другом методе создания контроля.
Richard MacCutchan
Вы устанавливаете опцию для плитки окон? Это должно позволить элементу управления редактированием быть видимым одновременно с другими клиентами.