dprintf() で Debag 情報を印字する

dprintf() は Debug モードで実行した時に専用のウインドウに文字列を印字します。
ウインドウはデバッグモードで開始してから、[デバッグ][ウインドウ]で目的のウインドウを選択して下さい。
OutputDebugString() と違い #define の定義や #include でヘッダファイルを取り込まなければなりません。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プロジェクトの作成

  1. 空の新規プロジェクト(Dprintf)を作成します。
  2. Dprintf.cpp をフォルダーに格納して[プロジェクト][既存項目の追加]からプロジェクトに追加します。
  3. #define で DEBUG を宣言して下さい。
    #include で dprintf.h を取り込んで下さい。
    dprintf() は printf() と同じ使い方です。
  4. Dprintf.cpp のソースコードです。
    /*********************************************************/
    /*★ EditBox から入力して GCM,LCM を計算する   前田 稔 ★*/
    /*********************************************************/
    #define     DEBUG
    #include    <dprintf.h>
    #include    <windows.h>
    #include    "resource.h"
    
    // 関数のプロトタイプ宣言
    LRESULT CALLBACK DialogProc( HWND, UINT, WPARAM, LPARAM );
    
    //★ Windows MAIN 関数
    int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, 
                          LPSTR lpCmdLine, int nCmdShow )
    {
        dprintf("Program が開始しました");
        DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,(DLGPROC)DialogProc);
        dprintf("Program を終了します");
        return TRUE;
    }
    
    //★ DialogBox の CALLBACK 関数
    LRESULT CALLBACK DialogProc(HWND hDlg,UINT msg,WPARAM wParam,LPARAM lParam)
    {   char        str[12];
        int         data1,data2,work;
    
        switch(msg)
        {
            case WM_COMMAND:
                switch(LOWORD(wParam))
                {   case IDOK:
                        dprintf("IDOK がクリックされました");
                        GetDlgItemText(hDlg,IDC_EDIT1,str,sizeof(str));
                        dprintf("IDC_EDIT1=%s",str);
                        data1= atoi(str);
                        GetDlgItemText(hDlg,IDC_EDIT2,str,sizeof(str));
                        dprintf("IDC_EDIT2=%s",str);
                        data2= atoi(str);
                        work= data1*data2;
                        while(data1 != data2)
                        {   if (data1>data2)    data1-= data2;
                            else                data2-= data1;
                        }
                        wsprintf(str,"%d",data1);
                        SetDlgItemText(hDlg,IDC_EDIT3,str);
                        wsprintf(str,"%d",work/data1);
                        SetDlgItemText(hDlg,IDC_EDIT4,str);
                        break;
                    case IDCANCEL:
                        dprintf("IDCANCEL がクリックされました");
                        PostMessage(hDlg,WM_CLOSE,0,0);
                        return TRUE;
                }
                break;
            case WM_CLOSE:
                EndDialog(hDlg, TRUE); 
                return TRUE;
        }
        return FALSE;
    }
        
  5. [ビルド] から [デバッグの開始] [実行] を選ぶと、コンパイルに続いて実行が行われます。
  6. ページ先頭の画像のように dprintf() の印字結果がデバッグ用のウインドウに表示されます。
    デバッグモードになったまま戻らないときは、[デバッグ][デバッグの中止]を選んで下さい。

超初心者のプログラム入門(Win32API C++)