1

私は少し困惑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ですか?

編集:失敗した場合の値は、DialogBox() の場合は -1、GetLastError() の場合は 0 です。

Edit2: antinome のリンクによって解決された問題:ウィンドウメッセージを含めafxwin.hて呼び出します。AfxInitRichEdit2()WM_CREATE

4

1 に答える 1

1

このスレッドには、この問題を解決するためのヒントがいくつかあります。要約する:

純粋な WinAPI を使用している場合:

  • LoadLibrary("RichEd20.dll");またはまでお電話くださいLoadLibrary("Msftedit.dll");。後者は、コントロールの新しいバージョンです。
  • Rich Edit Control in raw Win32によるInitCommonControlsEx()と、適切なクラス定数を使用して呼び出すこともできます(MSFTEDIT_CLASS明らかに) — ただし、Windows のビジュアル スタイルを機能させたい場合にのみ必要です。

MFC を使用している場合:

  • AfxInitRichEdit2()たとえば、初期化段階で呼び出すようにしてください。InitInstance()
于 2011-06-22T22:54:07.570 に答える