Я немного озадачен: я создал диалоговое окно с Edit Control
, затем я заметил, что текст не переносится словами, поэтому я погуглил и обнаружил, что вместо него я должен использовать Rich Edit Control
.Так я и сделал.Теперь, когда в моем диалоговом окне появляется Rich Edit Control
, функциональность меняется: без Rich Edit Control
диалоговое окно возвращает либо IDOK
, либо IDCANCEL
, который я обрабатываю за пределами кода обработчика сообщений.НО, если в диалоговом окне где-то есть Rich Edit Control
, оно всегда возвращает что-то, кроме IDOK
, прежде чем я даже нажму на любую кнопку в диалоговом окне: диалоговое окно, кажется, даже не создано вообще.
Вот обработчик сообщения:
INT_PTR CALLBACK MyDialogBox(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam){
switch(message){
case WM_INITDIALOG: {
SetDlgItemText(hDlg, IDC_EDIT1, (LPCTSTR)some_string.c_str());
return (INT_PTR)TRUE;
}
case WM_COMMAND:
switch(LOWORD(wParam)){
case IDOK: case IDCANCEL: {
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR)TRUE;
}
}
break;
}
return (INT_PTR)FALSE;
}
А вот код, в котором я использую диалоговое окно:
if(DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), hWnd, MyDialogBox) == IDOK){
// without rich edit control it goes here or below depending on the user choice.
}else{
// with rich edit it always goes here.
}
Итак, последний вопрос здесь: как я могу получить этоработает как обычно Edit Control
?
Редактировать: при сбое, значения: -1 для DialogBox () и 0 для GetLastError (), если это помогает?
Edit2: Проблема решена с помощью ссылки антинома: включите afxwin.h
и позвоните AfxInitRichEdit2()
в окне WM_CREATE
message.