質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.61%

背景色や文字色が反映されない

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 802

yukkuri

score 562

 前提・実現したいこと

Win32APIを使ってGUIを作っていたら、エラーが発生しました。

 発生している問題・エラーメッセージ

特になし

 該当のソースコード

#include <windows.h>

/**
 * ウィンドウプロシージャー
 *
 * @r LRESULT コールバック関数等から返される 32bit 値
 * CALLBACK 呼び出し規約
 *
 * @p hwnd ウィンドウのハンドル
 * @p msg メッセージ
 * @p wp 付加情報
 * @p lp 付加情報
 */
LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM );

/**
 * windows アプリケーションで初めに呼ばれる関数
 *
 * @p hInstance インスタンスハンドル このプログラムを判別するハンドル
 * @p hPrevInstance 現在使用されていないため常に NULL
 * @p lpCmdLine コマンドラインから受け取った引数
 * @p nCmdShow アプリケーションの初期表示設定
 */
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR lpCmdLine, int nCmdShow )
{
    HWND hwnd;
    WNDCLASS winc;
    MSG msg;

    winc.style         = CS_HREDRAW | CS_VREDRAW;    //    縦横方向にリサイズされた際再描画
    winc.lpfnWndProc   = WndProc;                    //    ウィンドウプロシージャーを設定
    winc.cbClsExtra    = winc.cbWndExtra;            //    構造体の追加領域
    winc.hInstance     = hInstance;                    //    インスタンスハンドル
    winc.hIcon         = LoadIcon( NULL, IDI_APPLICATION );            //    アイコンのビットマップハンドル
    winc.hCursor       = LoadCursor( NULL, IDC_ARROW );                //    マウスカーソル
    winc.hbrBackground = (HBRUSH)GetStockObject( WHITE_BRUSH );        //    背景色
    winc.lpszMenuName  = NULL;                        //    クラスメニュー
    winc.lpszClassName = TEXT( "TITLE" );            //    ウィンドウクラスの名前

    if( !RegisterClass( &winc ) ) return -1;

    hwnd = CreateWindow(
        TEXT( "TITLE" ), TEXT( "title" ),
        WS_OVERLAPPEDWINDOW,
//        100, 100, 640, 480,
        CW_USEDEFAULT, CW_USEDEFAULT,    //    デフォルト値
        CW_USEDEFAULT, CW_USEDEFAULT,
        NULL, NULL,
        hInstance, NULL
    );

    if( hwnd == NULL ) return -2;

    ShowWindow( hwnd, SW_SHOW );

//    MessageBox( NULL, TEXT( "message" ), TEXT( "title" ), MB_OK );

//    while( TRUE ){
        /***
         * メッセージキューからメッセージを受け取ります。
         *
         * MSG 型の構造体
         * ウィンドウのハンドル すべてのウィンドウから受け取るなら NULL
         * 受け取るメッセージの最小値でフィルタリング 行わない場合 0
         * 受け取るメッセージの最大値でフィルタリング 行わない場合 0
         */
//        GetMessage( &msg, NULL, 0, 0 );
        //    左クリックされたら
//        if( msg.message == WM_LBUTTONUP ) break;
        /***
         * ウィンドウプロシージャーに値を渡す
         *
         * MSG 型の構造体
         */
//        DispatchMessage( &msg );
//    }

    while( GetMessage( &msg, NULL, 0, 0 ) ) DispatchMessage( &msg );

    return msg.wParam;
}

LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp )
{
    int nYesNo;
    LPCREATESTRUCT lpcsWnd;

    HDC hdc;
    LPTSTR lptStr = TEXT( "message" );
    PAINTSTRUCT ps;

//    if( msg == WM_LBUTTONUP ){
//        exit( 0 );
//    }

    switch( msg ){
//        case WM_CLOSE:
//            return 0;
/*        case WM_CREATE:
            lpcsWnd = (LPCREATESTRUCT)lp;
            nYesNo = MessageBox( hwnd, TEXT( "window を作成しますか?" ), TEXT( "Question" ), MB_YESNO | MB_ICONQUESTION );
            if( nYesNo == IDYES ) return 0;
            else return -1;*/
        case WM_DESTROY:
//            MessageBox( hwnd, TEXT( "終了します" ), TEXT( "message" ), MB_ICONINFORMATION );
//            DestroyWindow( hwnd );        //    ウィンドウを破棄
            PostQuitMessage( 0 );
            return 0;
        case WM_PAINT:
            hdc = BeginPaint( hwnd, &ps );
            SetTextColor( hdc, RGB( 255, 255, 255 ) );
            TextOut( hdc, 10, 10, lptStr, lstrlen( lptStr ) );
            EndPaint( hwnd, &ps );
            return 0;
    }

    return DefWindowProc( hwnd, msg, wp, lp );
}

 試したこと

何度もソースを確認しました。

 補足情報(FW/ツールのバージョンなど)

Windows10、MinGW どちらも 64bit です。
また、エラーがコンパイル時出ています。

c:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.5.4/../../../../x86_64-w64-mingw32/bin/ld.e
xe: cannot open output file a.exe: Permission denied
collect2: ld returned 1 exit status
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

リンク時のエラーで、a.exe の作成ができないというエラーです

a.exe がすでにあるならそれを削除してからビルドしてみましょう

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/10/21 15:50

    動きました。ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る