benjweston Ответов: 1

Почему этот элемент управления редактированием 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

Вы устанавливаете опцию для плитки окон? Это должно позволить элементу управления редактированием быть видимым одновременно с другими клиентами.

1 Ответов

Рейтинг:
1