1

我有点困惑:我创建了一个对话框Edit Control,然后我注意到文本不是自动换行的,所以我用谷歌搜索并发现我应该使用它Rich Edit Control。所以我做了。现在,当Rich Edit Control我的对话框中有 a 时,功能会发生变化:没有Rich Edit Control返回的对话框IDOKor 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

编辑:当它失败时,值为:DialogBox() 为 -1,GetLastError() 为 0,如果有帮助吗?

Edit2: Antinome 的链接解决的问题:在窗口消息中包​​含afxwin.h并调用。AfxInitRichEdit2()WM_CREATE

4

1 回答 1

1

这个线程有一些解决这个问题的好技巧。总结一下:

如果使用纯 WinAPI:

  • 请务必致电LoadLibrary("RichEd20.dll");LoadLibrary("Msftedit.dll");。后者是控件的较新版本。
  • 根据原始 Win32 中的 Rich Edit Control,您还可以InitCommonControlsEx()使用适当的类常量(MSFTEDIT_CLASS显然)调用 - 但只有当您希望 Windows 视觉样式正常工作时才需要它。

如果使用 MFC:

  • 确保AfxInitRichEdit2()在初始化阶段调用,例如在InitInstance()
于 2011-06-22T22:54:07.570 回答