サーチ…


構文

  • #include <windows.h>
  • BOOL WINAPI DestroyWindow(HWND hwnd);
  • VOID WINAPI PostQuitMessage(int出口コード);
  • BOOL WINAPI MoveWindow(HWND hwnd、int x、int y、int cx、int cy、BOOL bRepaint);

WM_CREATE

WM_CREATEメッセージは、ウィンドウのCreateWindowEx呼び出し中にウィンドウプロシージャに送信されます。 lp引数には、 CreateWindowEx渡される引数を含むCREATESTRUCTへのポインタが含まれています。アプリケーションがWM_CREATEから0を返すと、ウィンドウが作成されます。アプリケーションが-1を返した場合、作成はキャンセルされます。

LRESULT CALLBACK winproc(HWND hwnd, UINT wm, WPARAM wp, LPARAM lp)
{
    switch (wm) {
        case WM_CREATE:
            CREATESTRUCT *cs = (CREATESTRUCT *) lp;
            if (MessageBox(hwnd, 
                "Do you want to continue creating the window?", "", MB_YESNO)  
                                         == IDYES) {
                /* create window controls */
                return 0;
            }
            /* cancel creation */
            return -1;
    }
    return DefWindowProc(hwnd, wm, wp, lp);
}

WM_DESTROY

このメッセージは、ウィンドウが破棄されたときにウィンドウプロシージャに送信されます。ウィンドウが画面から削除された後に送信されます。ほとんどのアプリケーションでは、WM_CREATEで取得されたメモリやハンドルなどのリソースはすべて解放されます。このメッセージを処理する場合は、0を返します。

LRESULT CALLBACK winproc(HWND hwnd, UINT wm, WPARAM wp, LPARAM lp)
{
    static char *text;
    switch (wm) {
        case WM_CREATE:
            text = malloc(256);
            /* use the allocated memory */
            return 0;
        case WM_CLOSE:
             switch (MessageBox(hwnd, "Save changes?", "", MB_YESNOCANCEL)) {
                 case IDYES:
                      savedoc();
                                         /* fall through */
                 case IDNO:
                      DestroyWindow(hwnd);
                      break;
             }
             return 0;
        case WM_DESTROY:
            /* free the memory */
            free(text);
            PostQuitMessage(0);
            return 0;
    }
    return DefWindowProc(hwnd, wm, wp, lp);
}

WM_CLOSE

アプリケーションの閉じるボタンがクリックされたときに送信されます。ウィンドウを破棄するときに送信されるWM_DESTROYと混同しないでください。主な違いは、WM_CLOSE(Microsoft Wordで変更を保存すると思う)で閉じることがキャンセルされている点です.Windowsが既に閉じられている(Microsoft Wordのメモリを解放すると考える)場合とは異なります。

LRESULT CALLBACK winproc(HWND hwnd, UINT wm, WPARAM wp, LPARAM lp)
{
    static char *text;
    switch (wm) {
        case WM_CREATE:
            text = malloc(256);
            /* use the allocated memory */
            return 0;
        case WM_CLOSE:
             switch (MessageBox(hwnd, "Save changes?", "", MB_YESNOCANCEL)) {
                 case IDYES:
                      savedoc();
                                         /* fall through */
                 case IDNO:
                      DestroyWindow(hwnd);
                      break;
             }
             return 0;
        case WM_DESTROY:
            /* free the memory */
            free(text);
            PostQuitMessage(0);
            return 0;
    }
    return DefWindowProc(hwnd, wm, wp, lp);
}

WM_SIZE

このメッセージは、サイズが変更された後、ウィンドウのウィンドウプロシージャに送信されます。このメッセージを処理する最も一般的な理由は、子ウィンドウの位置を調整することです。たとえば、メモ帳では、ウィンドウのサイズが変更されると、子ウィンドウ(編集コントロール)のサイズも変更されます。このメッセージを処理する場合は0を返します。

引数
wp ウィンドウサイジング定数の 1つ。
lp LOWORD(lp)はクライアント領域の新しい幅です
HIWORD(lp)はクライアント領域の新しい高さです。
LRESULT CALLBACK winproc(HWND hwnd, UINT wm, WPARAM wp, LPARAM lp)
{
    switch (wm) {
        case WM_SIZE:
            /* hwndEdit is the handle of the edit control window */
            MoveWindow(hwndEdit, 0, 0, LOWORD(lp), HIWORD(lp), TRUE);
            return 0;
   }
   return DefWindowProc(hwnd, wm, wp, lp);
}

WM_COMMAND

次の場合にウィンドウプロシージャに送信されます。

  • ユーザはメニューから項目を選択する
  • コントロールが親ウィンドウに通知を送信する
  • アクセラレータキーストロークが翻訳される
メッセージソース HIWORD(wp) LOWORD(wp) lp
メニュー 0 メニューID(IDM_ *) 0
アクセル 1 Accel ID(IDM_ *) 0
コントロール通知コードコントロールID コントロールウィンドウのHWND

たとえば、メモ帳で、ユーザーが "ファイル - >開く"をクリックすると、ファイルを開くためのダイアログボックスが表示されます。メニュー項目は、ウィンドウプロシージャのWM_CREATEメッセージで次のように処理されます。

LRESULT CALLBACK winproc(HWND hwnd, UINT wm, WPARAM wp, LPARAM lp)
{
    switch (wm) {
        case WM_COMMAND:
            switch (LOWORD(wp) {
                case ID_FILE_OPEN:
                    /* show file open dialog */
                    break;
                case ID_FILE_NEW:
                    /* create new instance */
                    break;
            }
            return 0;
   }
   return DefWindowProc(hwnd, wm, wp, lp);
}


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow