【发布时间】:2011-09-19 18:26:41
【问题描述】:
我有点困惑:我用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:问题被Antinome的link解决:包括afxwin.h并在窗口WM_CREATE消息处调用AfxInitRichEdit2()。
【问题讨论】:
-
了解
DialogBox()返回的值会很有帮助。还有,如果在DialogBox返回后调用GetLastError()返回什么值? -
@antinome,-1 表示 dialogbox(),0 表示 getlasterror()。
-
这是所有的代码吗?还是您的代码在一个或多个 case 语句中缺少 break?
-
如果未指定 ES_AUTOHSCROLL,则多行编辑控件会自动换行。请参阅Edit Control Styles 中的 ES_MULTILINE。
-
@Hans,是的,这都是我的代码。顺便说一句,该错误与代码无关:每当我添加 Rich Edit Control 时,对话框就会停止按预期运行,并且当我删除 Rich Edit Control 时,它又可以正常工作了!即使在我的代码中根本没有引用这个 Rich Edit Control,这一切也会发生。
标签: c++ winapi richedit dialog