Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 富编辑控件是否更改对话框返回值行为?_C++_Winapi_Richedit_Dialog - Fatal编程技术网

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,是的,这都是我的代码。顺便说一句,这个错误与代码无关:每当我添加富编辑控件时,对话框就会停止按预期运行,当我删除富编辑控件时,它会再次正常工作!即使在我的代码中根本没有引用这个丰富的编辑控件,这一切都会发生。