• ベストアンサー

領域を塗りつぶしたい

a-kumaの回答

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

四角形なら、APIの Rectangle() が使えます。 7色分の Pen を作っておいて、SelectObject() しながら7回四角形を書けばOKです。

A__
質問者

お礼

ありがとうございます。 使ったことがなかった関数だったからちょっと難しかったです。 今やっと少しできました。

関連するQ&A

  • 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にしたら問題なのでしょうか。

  • BCCのコンソールアプリからウィンドウ表示

    BCCのコンソールアプリからウィンドウを表示したいのですが、うまくいきません。 なにが悪いのでしょうか・・・ どなたかお教えいただけると助かります。 よろしくお願いいたします。 コンパイラ: Borland C++ 5.5.1 bcc32 コンパイル方法: bcc32 -WC WindowTest.cpp (コンソールアプリにしているのは、標準入力を受け標準出力に出すフィルタ機能も持たせようと思っているからです。) *** ソース (WindowTest.cpp) *** #include <windows.h> LRESULT CALLBACK WndProc ( HWND hWnd, UINT msg, WPARAM wp, LPARAM lp ){ // とりあえず空 (void)hWnd; (void)msg; (void)wp; (void)lp; return 0; } int main (int argc, char**argv){ HINSTANCE hInstance = (HINSTANCE)GetModuleHandle(NULL); WNDCLASSEX wc; char className[] = "hoge"; memset( &wc, 0, sizeof( wc )); wc.cbSize = sizeof(WNDCLASSEX); wc.style = 0; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon( NULL, IDI_APPLICATION ); wc.hCursor = LoadCursor( NULL, IDC_ARROW ); wc.hbrBackground = (HBRUSH)GetStockObject( WHITE_BRUSH ); wc.lpszMenuName = NULL; wc.lpszClassName = className; wc.hIconSm = NULL; if(! RegisterClassEx( &wc )) return 1; HWND hWnd = CreateWindow(className, "Title", WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, HWND_DESKTOP, NULL, hInstance, NULL); // ← ここで失敗し、ウィンドウが表示されない if (!hWnd) return 2; ShowWindow(hWnd, NULL); UpdateWindow(hWnd); MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } (void)argc; (void)argv; return 0; }

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

    VC++6.0です。 hCheckWnd = CreateWindow("BUTTON","checkbox", WS_CHILD | WS_VISIBLE | BS_CHECKBOX, 0,0,100,50, hWnd,NULL,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度使ったハンドルをウィンドを破棄した後使えるようにするにはどうしたらいいのでしょうか?

  • オーナー付きウィンドウと子ウィンドウについて

    http://web.kyoto-inet.or.jp/people/ysskondo/chap7.html​ のサイトで気になったのですが、 このサイトの hChildWnd=CreateWindow( "SubWindowClass","子ウインドウ", WS_CAPTION|WS_THICKFRAME|WS_CHILD, 10,10,200,100,hwnd,(HMENU)1, cs->hInstance,0); の|WS_CHILDを消すと if((hOwnedWnd==NULL)||(hChildWnd==NULL)) return -1; のところで終了してしまうのですが、 なぜなのでしょうか?

  • WinAPIでの画像高速切り替え表示プログラム2

    1の続きです。これを先に見た方は1から見てください。 お願いします。 int WINAPI WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR lpCmdLine,int nCmdShow) { WNDCLASS wc; MSG msg; wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WindowProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(NULL,IDI_APPLICATION); wc.hCursor = LoadCursor(NULL,IDC_ARROW); wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = __FILE__; if(!RegisterClass(&wc)) return 0; HWND hWnd=CreateWindow( __FILE__," ", WS_POPUP | WS_VISIBLE, 0,0, 1024,768, NULL,NULL,hInstance,NULL); if(hWnd==NULL) return 0; // タイマを作成する SetTimer( hWnd, TIMER_ID, TIMER_ELAPSE, NULL ); BOOL bRet; while((bRet=GetMessage(&msg,NULL,0,0))!=0){ if(bRet==-1) break; DispatchMessage(&msg); } // タイマを破棄する KillTimer( hWnd, TIMER_ID ); return (int)msg.wParam; } 2つに分かれてしまって申し訳ありません。 よろしくお願いします。

  • 点の描画について(win32API)

    win32APIでウィンドウに点を描画するプログラムを作ったのですが、SetPixel関数で点を描画しようとすると、特定のx座標に点が描画されません。線は普通に描画されるのですが・・・。 /*ソース*/ #include <windows.h> LRESULT CALLBACK WndProc(HWND hwnd, UINT Msg, WPARAM wp, LPARAM lp) { static HDC hdc; static PAINTSTRUCT ps; switch(Msg) { case WM_PAINT: //【ここです!】 hdc = BeginPaint(hwnd, &ps); MoveToEx(hdc , 0 , 300 , NULL); //比較のため線を引く準備 LineTo(hdc,1200,300); //比較のため線を引く for( int j = 1000; j > 0 ; j-- )SetPixel( hdc, j, 100, RGB(0,200,100) ) ; for( int j = 1000; j > 0 ; j-- )SetPixel( hdc, j, 200, RGB(0,200,100) ) ; //ここで点を描画 EndPaint(hwnd, &ps); return 0; case WM_DESTROY: //終了処理 PostQuitMessage(0); return 0; } return DefWindowProc( hwnd, Msg, wp, lp ); } //↓ごく普通のWinMainです。無視してください。 int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance , PSTR lpCmdLine , int nCmdShow ) { HWND hwnd; MSG msg; WNDCLASS winc; winc.style = CS_HREDRAW | CS_VREDRAW; winc.lpfnWndProc = WndProc; winc.cbClsExtra = winc.cbWndExtra = 0; 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("KITTY"); if (!RegisterClass(&winc)) return -1; hwnd = CreateWindow( TEXT("KITTY") , TEXT("Kitty on your lap") , WS_OVERLAPPEDWINDOW | WS_VISIBLE , CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT , NULL , NULL , hInstance , NULL ); if (hwnd == NULL) return -1; while( GetMessage(&msg , NULL , 0 , 0) ) DispatchMessage(&msg); return msg.wParam; } 解決策を模索するもうまくいかず・・・どうか回答よろしくお願いします。

  • 次のWindowsアプリで

    メッセージボックスは他のアプリのWindowの下に隠れることはないのですが他のアプリのウィンドウをクリックするとメッセージボックスの焦点がぼけアクティブでなくなります メッセージボックスを常にアクティブにする方法を終えてください #include <windows.h> using namespace std; WINAPI WinMain(HINSTANCE hI,HINSTANCE,LPSTR,int) { HWND hW; hW=CreateWindow("STATIC","",WS_OVERLAPPED, 0,0,9,9,NULL,NULL,hI,NULL); SetWindowPos(hW,HWND_TOPMOST,0,0,9,9,NULL); MessageBox(hW,"OK?","",MB_OK); return 0; }

  • WM_CREATE について

    Windows API の勉強を始めた者です。 CreateWindow関数を使ったときに発行されるWM_CREATEについて質問させていただきます。 以下のようなプログラムを作りました。このプログラムはウインドウを作るプログラムなのですが、はじめにウインドウを作るかどうかをWindowProcの中で聞いています。 このプログラムでウインドウを作らないという選択肢をとった時が分かりません。 WindowProcでは return -1 をするのでウインドウは作られず、従ってhWndにはNULLが入ります。そして次の文で、  if (hWnd == NULL) {   MessageBox(NULL,TEXT("CreateWindow failed"),NULL,MB_OK);   return 0;  } メッセージボックスが表示されてからプログラムが終了すると思ったのですが、実際にはメッセージボックスは表示されませんでした。 なぜでしょうか。return -1 をした時点で、ウインドウが作られないのでWM_DESTROYがウインドウプロシージャにSendされるのかと考えたのですが、そうなのでしょうか。 よろしくお願いします。 /* 作ったプログラム */ #include <windows.h> LRESULT CALLBACK WindowProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {  int YESNO;  switch(uMsg) {  case WM_DESTROY:   PostQuitMessage(0);  return 0;  case WM_CREATE:  YESNO = MessageBox(NULL, TEXT("Create a new window?"),        ((LPCREATESTRUCT)lParam)->lpszName, MB_YESNO);  if (YESNO == IDYES)   return 0;  if (YESNO == IDNO)   return -1;  }  return DefWindowProc(hWnd, uMsg, wParam, lParam); } int WINAPI WinMain(HINSTANCE hInstance,           HINSTANCE hPrevInstance,           PSTR lpCmdLine,            int nCmdShow) {  WNDCLASS wc;  ATOM atom;  MSG msg;  HWND hWnd;  wc.style = CS_HREDRAW| CS_VREDRAW;  wc.lpfnWndProc = WindowProc;  wc.cbClsExtra = 0;  wc.cbWndExtra = 0;  wc.hInstance = hInstance;  wc.hIcon = NULL;  wc.hCursor = NULL;  wc.hbrBackground = (HBRUSH)COLOR_BACKGROUND + 1;  wc.lpszMenuName = NULL;  wc.lpszClassName = TEXT("sample_window");  if ((atom = RegisterClass(&wc)) == 0) {   MessageBox(NULL,TEXT("RegisterClass failed"),NULL,MB_OK);   return 0;  }  hWnd = CreateWindow((LPCTSTR)atom, TEXT("Sampe window"),              WS_OVERLAPPEDWINDOW | WS_VISIBLE,              100, 100, 400, 300,              NULL, NULL, hInstance, NULL);                if (hWnd == NULL) {   MessageBox(NULL,TEXT("CreateWindow failed"),NULL,MB_OK);   return 0;  }  while (GetMessage(&msg, NULL, 0, 0) > 0) {   DispatchMessage(&msg);  }  return msg.wParam; }