| GetStockObject(WHITE_BRUSH);
  HOLLOW_BRUSH:Hollow brush (equivalent to 
    NULL_BRUSH) 
  NULL_BRUSH:Null brush (equivalent to HOLLOW_BRUSH)DC_BRUSH:Windows 98, 
    Windows NT 5.0 and later: Solid color brush. The default color is white. 
    The color can be changed by using the SetDCBrushColor function. For more information, see 
    the Remarks section. .  COLORREF =DWORD(32ビット符号無し整数:負の数はありません)CreateSolidBrush(rgbBLUE);wndclass.hbrBackground = 
(HBRUSH)CreateSolidBrush(rgbBLUE) で背景色を任意の色(この場合は青)にできます 画面描画用のキャンパスを教えてくれます。これをデバイスコンテキスト(Device 
Context:DC)といいます。これ専用の型はHDCで指定されます。 画面を再表示する必要があるとき(隠れていたウィンドウズが前面に出てくるとき等)に来るので、自分で画面を再表示します。 
  wParam: 
    画面描画用のキャンパスを教えてくれます。HDCで指定されます。ゼロの場合は自前でウィンドウズのHDCを調べること。BiginPaint関数を使います。
   デバイスコンテキストを教えてくれる関数
  画面用(WM_PAINT内でのみ使用可能):HDC BeginPaint(HWND hWnd, LPPAINTSTRUCT lpps)画面用(WM_PAINT内で以外で使用可能):HDC GetDC(HWND hWnd)
  プリンター用(WM_PAINT内で以外で使用可能): 
    HDC CreateDC(LPCTSTR lpszDriver, LPCTSTR lpszPrinterName, LPCTSTR lpszPortName, CONST 
    DEVMODE *lpInitData)
  
    EnumPrinters(PRINTER_ENUM_FAVORITE | PRINTER_ENUM_LOCAL | PRINTER_ENUM_DEFAULT, NULL, 
        2,(LPBYTE) pPrinters, cbPrinters, &cbPrinters, &cReturned)cReturnedが正なら
 
      pPrinters->pPrinterNameに通常使うプリンターの名前pPrinters->pDriverName通常使うプリンターのドライバー名pPrinters ->pPortNamep通常使うプリンターのポート名CreateDC(ドライバー名、プリンターの名前、ポート名、NULL) 
     ドライバー名、プリンターの名前、ポート名を取得するには 使用例
  
    | DWORD dwFlags = PRINTER_ENUM_FAVORITE | 
    PRINTER_ENUM_LOCAL | PRINTER_ENUM_DEFAULT; |  
    | HGLOBAL hPrinters; |  
    | LPPRINTER_INFO_2 pPrinters; |  
    | DWORD cbPrinters, cReturned; |  
    |  |  
    | if(hPrinters = GlobalAlloc(LPTR, 
    cbPrinters + 4)){ |  
    |  | if(!(pPrinters = (LPPRINTER_INFO_2) 
    GlobalLock(hPrinters))){ |  
    |  |  | GlobalFree(hPrinters); |  
    |  |  |  |  
    |  |  | return -1; |  
    |  | } |  
    | } |  
    | else{ |  
    |  | return -1; |  
    | } |  
    |  |  
    | EnumPrinters(dwFlags, 
    NULL, 2, NULL, 0, &cbPrinters, &cReturned); |  
    | if(EnumPrinters(dwFlags, 
    NULL, 2,(LPBYTE) pPrinters, cbPrinters, &cbPrinters, &cReturned)){ |  
    |  | if(cReturned > 0){ |  
    |  |  | INT i = 0; // i=0は通常使うプリンターを示します |  
    |  |  |  |  
    |  |  | strcpy(gszDeviceName,(pPrinters 
    +i)->pPrinterName); |  
    |  |  | strcpy(gszPort,(pPrinters 
    + i)->pPortName); |  
    |  |  | strcpy(gszDriverName,(pPrinters 
    + i)->pDriverName); |  
    |  | } |  
    |  | else{ |  
    |  |  | return 0; |  
    |  | } |  |  
    | } |  |  |  
    |  |  
    | GlobalUnlock(hPrinters); |  
    | GlobalFree(hPrinters); |  
    |  |  
    | return 1; |  画面描画用のキャンパスのデバイスコンテキストと描画方法の情報を持っています 
  LPPAINTSTRUCT=PAINTSTRUCT FAR * (Win16);PAINTSTRUCT * (Win32)PAINTSTRUCT ps; ⇒ LPPAINTSTRUCT lpps = &ps;
 
  
    |  | typedef struct tagPAINTSTRUCT { |  |  
    |  |  | HDC hdc; |  |  
    |  |  | BOOL fErase; |  |  
    |  |  | RECT rcPaint; |  |  
    |  |  | BOOL fRestore; |  |  
    |  |  | BOOL fIncUpdate; |  |  
    |  |  | BYTE rgbReserved[32]; |  |  
    |  | } PAINTSTRUCT; |  |  
    |  |  |  |  
  hdc:画面描画用のキャンパスのハンドル
  fErase:背景を更新するか(fErase=FALSE)、更新せずに自前で更新するか(fErase=TRUE)
  rcPaint:画面が書き換わる領域を指定 fRestoret:使いません fIncUpdate:使いませんrgbReserved:使いません  WM_PAINTメッセージを受け取ったときのみ実行できます。それ以外は、GetDC関数を使います。 最後にかならずEndPaint関数でデバイスコンテキストを消去します。 指定されたウィンドウの描画の終了を示します。この関数は、BeginPaint関数でペイント処理が完了した時点で必ず呼び出さなければなりません。 
  hDC:画面描画用のキャンパスのハンドルPaint:BeginPaintで見つけたSTRUCT構造体用変数 使用例
  
    | PAINTSTRUCT ps; |  
    | HDC hDC; |  
    |  |  
    | hDC = BeginPaint(hWnd, &ps); |  
    | if(hDC){ |  
    |  | ここで文字を書いたり絵を書いたりする |  
    |  | EndPaint(hDC, ps); |  
    | } |  指定されたウィンドウのクライアント領域に対するデバイスコンテキスト(画面やプリンタ)のハンドルを取得します。以後、このデバイスコンテキストを使って、クライアント領域内に描画ができます。この関数は、ウィンドウのクラスのスタイルに応じて、共通デバイスコンテキスト、またはクラスデバイスコンテキスト、またはプライベートデバイスコンテキストを取得します。共通デバイスコンテキストには、デフォルトの属性が割り当てられます。クラスコンテキストおよびプライベートコンテキストには、以前の属性がそのまま割り当てられます。 GetDC関数で見つけたデバイスコンテキストを解放します。 
  hWnd:描画したいウィンドウズの名札hDC:画面描画用のキャンパスのハンドル
   使用例
  
    | HDC hDC; |  
    |  |  
    | hDC=GetDC(hWnd); |  
    | if(hDC){ |  
    |  | ここで文字を書いたり絵を書いたりする |  
    |  | ReleaseDC(hWnd, hDC); |  
    | } |  指定されたデバイスのデバイスコンテキストを、指定の名前で作成します。 
  lpszDriver:
    Windows 95 以降: Win32 
        ベースのアプリケーションでは、このパラメータは無視されます。NULL 
        を指定してください。ただし、NULL で終わる文字列 "DISPLAY" 
        へのポインタを指定すると、ディスプレイのデバイスコンテキストのハンドルが取得できます。このパラメータで 
        "DISPLAY" 
        へのポインタを指定したときは、ほかのパラメータをすべて NULL 
        にしなければなりません。Windows NT: ディスプレイのデバイスコンテキストのハンドルを取得するときは、NULL 
        で終わる文字列 "DISPLAY" 
        へのポインタを指定します。プリンタのデバイスコンテキストのハンドルを取得するときは、NULL 
        で終わるプリンタドライバの名前 (通常は "WINSPOOL") 
        へのポインタを指定します。lpszDevice:出力デバイスの名前が入った NULL 
    で終わる文字列へのポインタを指定します (たとえば、"Epson 
    FX-80") 
    。プリンタモデルの名前ではありません。このパラメータは必須です。lpszOutput:指定されたデバイスのデバイスコンテキストを、指定の名前で作成します。Win32 
    アプリケーションでは、このパラメータは無視されます。NULL 
    を指定してください。lpInitData:デバイスドライバに対するデバイス固有の初期化データが入ったDEVMODE 
    構造体へのポインタを指定します。DocumentProperties 
    関数を使うと、指定したデバイスの情報を MSG 
    構造体の形で取得できます。デフォルトの初期化を使用する場合は、NULL 
    を指定します。 CreateDC関数で見つけたデバイスコンテキストを削除します。 3原色(Red、Green、Blue)を示す色を指定します。 
  LPCOLORREF=COLORREF FAR * (Win16);COLORREF 
    * (Win32)COLORREF cr; ⇒ LPCOLORREF lprc = &lpcr; それぞれの色は256種類取れます。 
  R: 0〜0xFF(=256)の256色G: 0〜0xFF(=256)の256色B: 0〜0xFF(=256)の256色 COLORREFで 
  赤は0xFF0000緑は0x00FF00青は0x0000FF となります。簡単には、RGBで指定します。 
  赤=RGB(0xFF, 0x00, 
    0x00)緑=RGB(0x00, 0xFF, 
    0x00)青=RGB(0x00, 0x00, 0xFF) 同様に任意の色が作れます。 
  rgbWHITE:#define rgbWHITE RGB(0xff, 0xff, 0xff)rgbDARKWHITE:#define rgbDARKWHITE 
    RGB(0xe0, 0xe0, 0xe0)rgbBLACK:#define rgbBLACK RGB(0, 0, 0)rgbDARKBLACK:#define 
    rgbDARKBLACK RGB(0x10, 0x10, 0x10)rgbLIGHTBLACK:#define 
    rgbLIGHTBLACK RGB(0x20, 0x20, 0x20)rgbGRAY:#define 
    rgbGRAY RGB(0x80, 0x80, 0x80)rgbBKGRAY:#define 
    rgbBKGRAY RGB(0x30, 0x30, 0x30)rgbDARKGRAY:#define 
    rgbDARKGRAY RGB(0x40, 0x40, 0x40)rgbLIGHTGRAY:#define 
    rgbLIGHTGRAY RGB(0xc0, 0xc0, 0xc0)rgbBRIGHTGRAY:#define 
    rgbBRIGHTGRAY RGB(0xd0, 0xd0, 0xd0)rgbRED:#define rgbRED 
    RGB(0xff, 0, 0) rgbDARKRED:#define 
    rgbDARKRED RGB(0x80, 0, 0) rgbLIGHTRED:#define 
    rgbLIGHTRED RGB(0xff, 0x80, 0x80) rgbGREEN:#define 
    rgbGREEN RGB(0, 0xff, 0) rgbDARKGREEN:#define 
    rgbDARKGREEN RGB(0, 0x80, 0) rgbLIGHTGREEN:#define 
    rgbLIGHTGREEN RGB(0x80, 0xff, 0x80) rgbBLUE:#define 
    rgbBLUE RGB(0, 0, 0xff) rgbDARKBLUE:#define 
    rgbDARKBLUE RGB(0, 0, 0x80) rgbLIGHTBLUE:#define 
    rgbLIGHTBLUE RGB(0x80, 0x80, 0xff)rgbCYAN:#define 
    rgbCYAN RGB(0, 0xff, 0xff)rgbDARKCYAN:#define 
    rgbDARKCYAN RGB(0, 0x80, 0x80)rgbLIGHTCYAN:#define 
    rgbLIGHTCYAN RGB(0x80, 0xff, 0xff)rgbMAGENTA:#define 
    rgbMAGENTA RGB(0xff, 0, 0xff)rgbDARKMAGENTA:#define 
    rgbDARKMAGENTA RGB(0x80, 0, 0x80)rgbLIGHTMAGENTA:#define 
    rgbLIGHTMAGENTA RGB(0xff, 0x80, 0xff)rgbYELLOW:#define 
    rgbYELLOW RGB(0xff, 0xff, 0)rgbDARKYELLOW:#define 
    rgbDARKYELLOW RGB(0x80, 0x80, 0)rgbLIGHTYELLOW:#define 
    rgbLIGHTYELLOW RGB(0xff, 0xff, 0x80)rgbCREAMYELLOW:#define 
    rgbCREAMYELLOW RGB(0xff, 0xff, 0xe0) 文字の色を指定します。  そして文字を書くにはDrawText関数をつかってみます。  
  hDC:画面やプリンターへのキャンバスハンドル.lpMessage:表示するメッセージnSize:表示する文字列の長さ:stelen(lpMessage) や 
    sizeof(lpMessage)但し、配列に限る lpRect:テキストを表示する長方形領域:このなかでuFormatに従って整形されますuFormat:整形方法を指定します
    DT_BOTTOM 一行表示(DT_SINGLELINE)のときに下線にそろえる。 DT_CALCRECT 
        一行表示のとき、文字が少なく右一杯にならないときに長方形を調節して接するようにします。複数行表示のときは高さを調節して全体が収まるようにします。で、テキストの高さを返します。計算のみ実行し文字は表示しません。DT_CENTER 
        左右中央に書きます。 DT_EDITCONTROL 
        複数行表示のエディトボックスをシミュレートします。 DT_END_ELLIPSIS or DT_PATH_ELLIPSIS 
        指定の長方形内に収まるように文字列の省略をします。但し、 
        DT_MODIFYSTRINGを指定する必要があります。文字列の最後尾を省略する場合にDT_END_ELLIPSISを指定します。中間で省略するにはDT_PATH_ELLIPSISを指定します。また、フォルダ文字列のように¥記号を含んでいるときは¥記号以降の文字列が損なわれないようにします。DT_EXPANDTABS たぶを8個分の空白で展開します。DT_WORD_ELLIPSIS, 
        DT_PATH_ELLIPSIS,  DT_END_ELLIPSISと一緒に使えません。 DT_EXTERNALLEADING 文字の高さに余分な空白を含める。 DT_HIDEPREFIX Windows NT 2000以降: 下線付文字を出す&命令(&プレフィックス文字)のみを無視する。他の命令文字はそのまま。
      input string: "A&bc&&d"
        ⇒normal: "Abc&d"(bに下線がつく)⇒HIDEPREFIX: "Abc&d" 
      DT_NOPREFIX と DT_PREFIXONLY少々違いますDT_INTERNAL 
        文字の大きさなどを計算するのにシステムフォントを使用します DT_LEFT 左揃えDT_MODIFYSTRING 
        長方形に合うように文字列を修正します。DT_END_ELLIPSISとDT_PATH_ELLIPSISを一緒に指定してください。. DT_NOCLIP 
        長方形からはみ出した部分もそのまま表示します。通常は、表示しません。. DT_NOFULLWIDTHCHARBREAK Windows NT 2000以降とWindows 
        98: 日本語などの2バイト文字の場合に真中(一バイト目)で改行しないようにします。 
        DT_WORDBREAKも一緒に指定します。 DT_NOPREFIX 
        すべてのプレフィックス文字による効果を無視します。DT_HIDEPREFIXとDT_PREFIXONLYの違いにも注意。. DT_PREFIXONLY Windows NT 2000以降: 
        下線部のみ表示します。DT_NOPREFIXとDT_HIDEPREFIXも参照。.DT_RIGHT 右揃え DT_RTLREADING 
        ヘブライ文字やアラビック文字のように右から左に表示します。 DT_SINGLELINE 
        一行に表示します。行替え命令は無視されます。DT_TABSTOP タブストップの展開文字数を指定します。 
        上位バイトがその文字数になります。DT_CALCRECT, DT_EXTERNALLEADING, 
        DT_INTERNAL, DT_NOCLIP及びDT_NOPREFIXは一緒に使えません。 DT_TOP 一行表示の時に上端をそろえます。 DT_VCENTER 上下中央に書きます。 DT_WORDBREAK 
        長方形の右端から単語がはみ出るときには、その単語を次の行に表示します。. 
        日本語のような2バイト文字の場合はDT_NOFULLWIDTHCHARBREAKも一緒につかうといいでしょう。DT_WORD_ELLIPSIS 
        長方形内に収まらないときには省略して省略記号を表示します。  使用例
  
    | COLORREF oldcolor; |  
    | RECT rc; |  
    | CHAR sz_message[] = 
    "Hellow!!!"; |  
    |  |  
    | SetRect(&rc, 100, 100, 200, 120); |  
    | oldcolor = SetTextColor(hDC, RGB(0xff, 0x00, 0x00)); |  
    | DrawText(hDC, sz_message, strlen(sz_message), &rc, DT_CENTER | DT_VCENTER); |  
    | if(old_color != CLR_INVALID){ |  
    |  | SetTextColor(hDC, oldcolor); |  
    | } |       |