0

コンパイルしてエラーなしで実行します。唯一のことは、ウィンドウが表示されないことです。マウスでウィンドウを閉じるまで、デストラクタは永久にとどまる必要がありますか?

#include <windows.h>
#include <richedit.h>

class richEdit {
  HWND richeditWindow;
  richEdit() {
    HMODULE richedit_library = LoadLibrary("Msftedit.dll");
    if (NULL == richedit_library) abort();

    HINSTANCE hInstance = (HINSTANCE)GetModuleHandle(0);
    richeditWindow = CreateWindowExW (
      WS_EX_TOPMOST,
      MSFTEDIT_CLASS,
      L"window text",
      WS_OVERLAPPED | WS_SYSMENU | ES_MULTILINE | WS_VISIBLE,
      0, 0, 500, 500,
      NULL, NULL, hInstance, NULL
    );
  }
  ~richEdit() {
    MSG msg;
    while( GetMessageW( &msg, richeditWindow, 0, 0 ) ) {
      TranslateMessage( &msg );
      DispatchMessageW( &msg );
    }
  }
};

int main() {
  richEdit re();
}
4

1 に答える 1

2

あなたの問題はここにあります:

richEdit re();

タイプのデフォルトで構築されたオブジェクトではありませんrichEditre引数をとらず、を返すという名前の関数の宣言ですrichEdit

代わりにこれが必要です:

richEdit re;

...またはC++11の場合:

richEdit re{};

ブロッキングデストラクタは、将来確実に頭痛の種になるものであることに注意してください。

于 2013-01-17T20:07:11.420 に答える