C++ 富编辑控件是否更改对话框返回值行为?
我有点困惑:我创建了一个带有C++ 富编辑控件是否更改对话框返回值行为?,c++,winapi,richedit,dialog,C++,Winapi,Richedit,Dialog,我有点困惑:我创建了一个带有编辑控件的对话框,然后我注意到文本没有文字包装,所以我在谷歌上搜索,发现我应该使用丰富的编辑控件。所以我做了。现在,当我的对话框中出现丰富编辑控件时,功能会发生变化:如果没有丰富编辑控件,对话框将返回IDOK或IDCANCEL,我将在消息处理程序代码之外处理这些控件。但是,如果对话框中的任何位置都有一个丰富的编辑控件,则在我单击对话框中的任何按钮之前,它总是返回除IDOK以外的其他内容:对话框似乎根本没有创建 以下是消息处理程序: INT_PTR CALLBACK M
编辑控件的对话框,然后我注意到文本没有文字包装,所以我在谷歌上搜索,发现我应该使用丰富的编辑控件。所以我做了。现在,当我的对话框中出现丰富编辑控件时,功能会发生变化:如果没有丰富编辑控件
,对话框将返回IDOK
或IDCANCEL
,我将在消息处理程序代码之外处理这些控件。但是,如果对话框中的任何位置都有一个丰富的编辑控件
,则在我单击对话框中的任何按钮之前,它总是返回除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.
}
所以,这里的最终问题是:我如何让它像正常的编辑控件一样工作
编辑:如果失败,则DialogBox()的值为:-1,GetLastError()的值为0,如果有帮助的话
Edit2:antinome解决的问题:包括afxwin.h
并在窗口WM\u CREATE
消息中调用AfxInitRichEdit2()
。有一些解决此问题的好方法。总结如下:
如果使用纯WinAPI:
- 确保调用
LoadLibrary(“RichEd20.dll”)代码>或加载库(“Msftedit.dll”)代码>。后者是控件的较新版本
- 根据,您还可以使用适当的类常量(
MSFTEDIT_class
)调用InitCommonControlsEx()
),但只有在希望windows视觉样式正常工作时才需要它
如果使用MFC:
- 确保在初始化阶段调用
AfxInitRichEdit2()
,例如在InitInstance()
有一些解决此问题的好方法。总结如下:
如果使用纯WinAPI:
- 确保调用
LoadLibrary(“RichEd20.dll”)代码>或加载库(“Msftedit.dll”)代码>。后者是控件的较新版本
- 根据,您还可以使用适当的类常量(
MSFTEDIT_class
)调用InitCommonControlsEx()
),但只有在希望windows视觉样式正常工作时才需要它
如果使用MFC:
- 确保在初始化阶段调用
AfxInitRichEdit2()
,例如在InitInstance()
了解DialogBox()返回的值会很有帮助。
。另外,如果在DialogBox返回后调用它,会返回什么值?@antimome,-1表示DialogBox(),0表示getlasterror()。这就是全部代码吗?或者您的代码在一个或多个case语句中缺少break?如果未指定ES_AUTOHSCROLL,则多行编辑控件将被字包装。请参阅中的多行。@Hans,是的,这都是我的代码。顺便说一句,这个错误与代码无关:每当我添加富编辑控件时,对话框就会停止按预期运行,当我删除富编辑控件时,它会再次正常工作!即使在我的代码中根本没有引用这个丰富的编辑控件,这一切都会发生。了解DialogBox()
返回的值会很有帮助。另外,如果在DialogBox返回后调用它,会返回什么值?@antimome,-1表示DialogBox(),0表示getlasterror()。这就是全部代码吗?或者您的代码在一个或多个case语句中缺少break?如果未指定ES_AUTOHSCROLL,则多行编辑控件将被字包装。请参阅中的多行。@Hans,是的,这都是我的代码。顺便说一句,这个错误与代码无关:每当我添加富编辑控件时,对话框就会停止按预期运行,当我删除富编辑控件时,它会再次正常工作!即使在我的代码中根本没有引用这个丰富的编辑控件,这一切都会发生。