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); |
} |
|