• ベストアンサー

CreateWindow で作ったウィンドウが白いんですが

VC++ 6.0 で CreateWindow で作ったウィンドウが 白いんですが、これを、メッセージボックスと同じ色(鉛色?)にするにはどうしたらいんでしょうか。 あるいは、その逆、チェックボックス等に付属するテキスト文字の背景を白くできればそれでもかまいません。 (デフォルトで灰色なので)                  ↓ CreateWindow("BUTTON", "このテキスト背景が灰色",        WS_CHILD | WS_VISIBLE |        BS_AUTOCHECKBOX,        Window_Width,        Window_Height,        NULL,        NULL,        hWnd,        NULL);

  • alx
  • お礼率97% (112/115)

質問者が選んだベストアンサー

  • ベストアンサー
  • fruipa
  • ベストアンサー率38% (14/36)
回答No.2

やった事があるのですが、そのソースが手許になく、要約だけですが。 WM_CTLCOLORメッセージを受け取った時に、そのメッセージの対象ウィンドウが、色を変えたいウィンドウかどうかをチェックし、取得したデバイスコンテキストのSetBkColor関数を呼び出すと色を変えることが出来ます。 MFCだとデバイスコンテキスト・ウィンドウへのポインタとも、WM_CTLCOLORメッセージのパラメータにあります。SDKも多分同様ではないでしょうか? WM_CTLCOLORとSetBkColorをキーワードにしてWeb検索してみてください。

alx
質問者

お礼

すみません、もう回答がつくとは思ってなかったのですが、本日確認しました。ありがとうございます。 アドバイスどおりやってみます。

その他の回答 (1)

  • 12m24
  • ベストアンサー率23% (193/817)
回答No.1

 ライブラリを見てもらいたいのですが、既定のクラスを利用すると、その情報を基にウィンドウを作ることになります。  GDI関数から自分で書くか、リソーススクリプトからダイアログを作る必要があります。

参考URL:
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpwinui/html/_win32_createwindow.asp
alx
質問者

お礼

しょうもない質問ですみません。つまりどうすればいいのかがわかりません。 猫でもわかる~ のサンプルソースをあれこれ打ち込んでる程度の初心者です。お時間があるときにでもまた教えていただければ幸いです。

関連するQ&A

  • チェックボックスのテキストを背景に透過させるには?

    VC++6.0です。 hCheckWnd = CreateWindow("BUTTON","checkbox", WS_CHILD | WS_VISIBLE | BS_CHECKBOX, 0,0,100,50, hWnd,NULL,hInst,NULL); で作成したチェックボックスのテキストが背景色から浮いてしまい困っています。 背景色に透過させるか色を指定して背景色と同色にするか出来ればいいのですが方法がわからずにいます。 宜しくお願いします。

  • チェックボックスの周囲の色が

    灰色になって困っています。 なおチェックボックスは hC0=CreateWindow(TEXT("BUTTON"),TEXT("Check"),WS_CHILD|WS_VISIBLE|BS_CHECKBOX|BS_AUTOCHECKBOX,0,0,0,0,hWmain,NULL,hI,NULL); によって作りました。 スタイルを変えるなりメッセージをセンドするなりして白くできるのでしょうか?

  • CreateWindowについて

    hE=CreateWindow("EDIT",NULL,WS_CHILD|WS_VISIBLE|ES_MULTILINE|ES_AUTOVSCROLL|WS_VSCROLL|ES_READONLY,0,0,100,100,hW,(HMENU)ID_EDIT,hI,NULL); のようにES_READONLYを入れるとエジットコントロールの背面が灰色になってしまうのですがES_READONLYを入れる前のように背面を白いままにしたいのですが何か方法はありませんか。

  • ListBoxコントロール

    hLB1=CreateWindow ("LISTBOX","",WS_CHILD|WS_VISIBLE|LBS_STANDARD, 0,0,300,150,hwnd,(HMENU)1,cs->hInstance,NULL); hLB2=CreateWindow ("LISTBOX","",WS_CHILD|WS_VISIBLE|LBS_STANDARD, 0,160,300,150,hwnd,(HMENU)2,cs->hInstance,NULL); という風に2つのListBoxコントロールを作っているサンプルを見たのですが (HMENU)1と(HMENU)2のところをともにNULLにしたら問題なのでしょうか。

  • ボタンの文字の大きさを変更したい

    CreateWindow によるボタンを作成してみたのですが、 ボタンラベルとして貼る以下の "明朝" という文字の大きさを 変えるにはどうすればいいのでしょうか。 hButtonWnd1 = CreateWindow("BUTTON", "明朝",               S_CHILD | WS_VISIBLE | BS_PUSHBUTTON,               20, 20, 100, 30,               hWnd,               (HMENU)ID_MI,               hInst,               NULL);

  • 1つのウィンドウに2つのエディット

    case WM_CREATE:  GetClientRect(hWnd, &rc);  EditL = CreateWindow(  TEXT("EDIT") , NULL ,  WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL |  ES_AUTOHSCROLL | ES_AUTOVSCROLL |  ES_LEFT | ES_MULTILINE ,  0 , 0 , rc.right / 2 , rc.bottom , hWnd , (HMENU)1 ,  ((LPCREATESTRUCT)(lParam))->hInstance , NULL);  EditR = CreateWindow(  TEXT("EDIT") , NULL ,  WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL |  ES_AUTOHSCROLL | ES_AUTOVSCROLL |  ES_LEFT | ES_MULTILINE ,  rc.left / 2 , 0 , rc.right , rc.bottom , hWnd , (HMENU)2 ,  ((LPCREATESTRUCT)(lParam))->hInstance , NULL);  return FALSE; とすると、1つのエディットしか表示されません。 また、 case WM_SIZE:  GetClientRect(edit, &rc); MoveWindow(edit, rc.left, rc.top, rc.right, rc.bottom, TRUE); として、ウィンドウサイズが変更された時に どちらのエディットもクライアント領域にあわせたつもりなのですが、 サイズ変更で左側のエディットがスクロールバーの幅の分だけ 縮小されてしまいます。 どこをどのように直したらよろしいのでしょうか? 宜しくお願いします。 #Win98 & VC++6.0 & SDK で作成しています。

  • Windowハンドルを再利用できない

    hPushBox=CreateWindow("BUTTON","a",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,0,0,0,0,hW,HMENU(0), ((LPCREATESTRUCT)lP)->hInstance,NULL);DestroyWindow(hPushBox); hPushBox=CreateWindow("BUTTON","a",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,0,0,0,0,hW,HMENU(0), ((LPCREATESTRUCT)lP)->hInstance,NULL);DestroyWindow(hPushBox); Window処理関数で上記のようにするとコンパイルは通るのに実行がエラーになります 1度使ったハンドルをウィンドを破棄した後使えるようにするにはどうしたらいいのでしょうか?

  • c++ で web browser

    windows 7 32 vs c++ 2010 で web browser を作成しようとして躓いています windows xp 32 vs c++ 2010 で動いた 下記コードを 7 で実行すると CreateWindow されません。 ie_hWnd = CreateWindow("AtlAxWin", "Shell.Explorer.2", WS_CHILD | WS_VISIBLE, 0, 0, 500, 500, main_hWnd, NULL, GetModuleHandle(NULL), NULL); 何をどう変えれば 7 でも動くようになりますか? よろしくお願いします。

  • テキストボックスからフォーカス外す

     editBox = CreateWindow(   "EDIT",   "あああ",   SS_CENTER | WS_CHILD | WS_VISIBLE,   0,0,100,20,   hWnd,   NULL,   hInstance,   NULL); テキストボックスのフォーカスを外すにはどうしたら いいんですか? ESCキーでフォーカスを外そうと思ったら、 テキストボックスにフォーカスがあるせいで case WM_KEYDOWN が動作しません。 フォーカスを外すというソース自体も分かっていません。  case WM_KEYDOWN:   if( wParam == VK_ESCAPE )    ?  break;

  • テキストエディタならばCreateWindow

    を使って hEdit = CreateWindow("EDIT",NULL,WS_CHILD| WS_VISIBLE|ES_WANTRETURN|ES_MULTILINE| ES_AUTOVSCROLL|WS_VSCROLL|ES_AUTOHSCROLL| WS_HSCROLL, 0,0,rc.right,rc.bottom,hWnd,(HMENU)ID_EDIT, hInst,NULL); として char Str[1048576]にテキストをおさめ SetWindowText(hEdit,Str); とすればスクロール関数も使う必要なくカレットもでて文字を簡単に編集できるのですが テキストビューワならば文字を変更する必要が無くカレットもでると困るのでこれが使えません また↓や↑で1行スクロールしないといけません (エディタの場合はカレットが上下端にきたときにスクロールだからちょっと違う) DrawTextだとスクロール関数を使わないといけないような気がするし・・・ 見るだけのテキストビューワを作るのに適した方法やC言語SDK関数を教えてください

専門家に質問してみよう