gpt4 book ai didi

c++ - Rich Edit Control 更改 DialogBox 返回值行为?

转载 作者:太空宇宙 更新时间:2023-11-04 12:18:26 26 4
gpt4 key购买 nike

我有点困惑:我用 Edit Control 创建了一个对话框,然后我注意到文本没有自动换行,所以我用 google 搜索发现我应该使用 Rich改为编辑控件。所以我做了。现在,只要我的对话框中有 Rich Edit Control,功能就会发生变化:如果没有 Rich Edit Control,对话框会返回 IDOKIDCANCEL,我在消息处理程序代码之外进行处理。但是,如果对话框中的任何地方都有 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 的 link 解决: 包含 afxwin.h 并在窗口 WM_CREATE 消息中调用 AfxInitRichEdit2()

最佳答案

This thread 有一些解决此问题的好技巧。总结:

如果使用纯 WinAPI:

  • 确保调用 LoadLibrary("RichEd20.dll");LoadLibrary("Msftedit.dll");。后者是较新版本的控件。
  • 根据 Rich Edit Control in raw Win32 ,您还可以使用适当的类常量(显然是 MSFTEDIT_CLASS)调用 InitCommonControlsEx() — 但仅当您希望 windows 视觉样式起作用时才需要它。

如果使用 MFC:

  • 确保在初始化阶段调用 AfxInitRichEdit2(),例如在 InitInstance()

关于c++ - Rich Edit Control 更改 DialogBox 返回值行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6429881/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com