トップページ
ひらく | たたむ | ページトップ
↓マウスで反転選択した文字を検索
Win32API
   
ページ内検索 ページ外検索
検索したい文字を入力して
ENTERを押すと移動します。
\n
[ トップページ ]
[ ____CommandPrompt ] [ ____JScript ] [ ____MySQL ] [ ____Cygwin ] [ ____Java ] [ ____Emacs ] [ ____Make ] [ ____Perl ] [ ____Python ] [ ____OpenGL ] [ ____C# ] [ ____StyleSheet ] [ ____C++ ] [ ____Winsock ] [ ____Thread ] [ ____VisualStudio ] [ ____C ] [ ____Win32API ] [ ____Lua ] [ ____PhotoShop ]
ヘッダ検索
___

■ DeviceContext


___

■ GetDC

SYNTAX HDC GetDC( HWND hWnd ) DESC 指定されたウィンドウのクライアント領域, 画面全体を表すディスプレイデバイスコンテキストのハンドルを取得する 指定されたウィンドウで指定されているクラススタイルに応じて 共通, クラス, プライベートいずれかのデバイスコンテキストを取得する GetDC は 共通デバイスコンテキストを取得するたびにデフォルトの属性を割り当てる。 クラスデバイスコンテキスト, プライベートデバイスコンテキスト には 以前の属性をそのまま割り当てる 共通デバイスコンテキスト が不要になったら ReleaseDC() を呼び出して解放すること クラスデバイスコンテキスト, プライベートデバイスコンテキストは ReleaseDC() を呼び出して解放しなくてもよい ReleaseDC() は GetDC を呼び出したのと同じスレッドから呼び出さなければなりません デバイスコンテキストの数は 利用可能なメモリの量で制限される 共通デバイスコンテキスト POINT リソースを節約するため共有するということ。 だからリセットされる。 システム上の特殊なキャッシュ領域に保持される画面DCのこと。 共通デバイスコンテキストは, 描画処理をそれほど頻繁に実行しないようなアプリケーションで使われる。 システムは,DCのハンドルを返す前に,DCをデフォルトのオブジェクト,属性,モードで初期化する。 アプリケーションが実行する描画処理には,これらのデフォルト値が使われる。 デフォルト以外の値を使いたければ, GDI関数を使って新しいオブジェクトを選択したり 既存のオブジェクトの属性を変更したり,あるいは別のモードを選択する必要がある。 POINT 共通デバイスコンテキストはごく限られた数しか存在できないため, 描画を終えたらDCを解放するようにしてください。 共通デバイスコンテキストを解放すると,デフォルトデータに対して加えられた変更はすべて破棄される。 プライベートデバイスコンテキスト POINT 高速化のために、固有にもつということ。 プライベートデバイスコンテキストも画面デバイスコンテキストの一種ですが 共通デバイスコンテキストとは異なり いったんデフォルトデータが変更されると DCを解放したあとでも変更点は保持される。 プライベートデバイスコンテキストを使うのは 描画頻度が非常に高いアプリケーションです。 たとえば,CAD, DTP, ドローイング、ペインティングアプリケーションなど。 プライベートデバイスコンテキストはシステムキャッシュの一部ではなく 使い終わったあとで解放する必要はない。 あるウィンドウクラスのウィンドウがすべて破棄されると それに対応するプライベートコンテキストもシステムが自動的に破棄する。 プライベートデバイスコンテキストを作成するには WNDCLASS構造体のstyleメンバを CS_OWNDC というウィンドウクラススタイルで初期化して RegisterClass() を呼び出す。 CS_OWNDCスタイルを指定してウィンドウを作成したら,GetDC,GetDCEx,またはBeginPaint関数を一度呼び出せば, プライベートデバイスコンテキストを識別するハンドルを取得することができます このハンドル(とそれに結び付けられたDC)は そのクラスのウィンドウが削除されるまで使い続けることができる。 グラフィックオブジェクトやその属性を変更したり,グラフィックモードを変えたりした場合, ウィンドウが削除されるまでそれらの変更点は保持される。 ウィンドウデバイスコンテキスト ウィンドウデバイスコンテキストを使うと たとえクライアント領域外であっても,ウィンドウの好きな場所を描画できる。 通常,ウィンドウデバイスコンテキストが使われるのは,特殊な非クライアント領域を持つ ウィンドウでWM_NCPAINTやWM_NCACTIVATEメッセージを処理するような場合。 それ以外の目的でウィンドウデバイスコンテキストを使用することはお勧めしません。 詳細についてはGetWindowDCを参照。 親デバイスコンテキスト 親デバイスコンテキストを使うと,ウィンドウのクリッピング領域のセットアップに必要な時間を最小限にできる。 通常,親デバイスコンテキストを使う目的は,プライベートやクラスデバイスコンテキストを 使わずにコントロールウィンドウの描画を高速化すること。 たとえば, システムがプッシュボタンやエディットコントロールを描画する際は親デバイスコンテキストを使います。 親デバイスコンテキストは子ウィンドウで使うことだけを目的としていますので,トップレベル, あるいはポップアップウィンドウでは絶対に使わないでください。 詳細についてはParent Display Device Contextsを参照してください。
    // NULL を指定すると, Window外の画面全体に描画対象にできる
    HDC hDC = GetDC( NULL );


    WARNING
      Local 変数にすると問題あるかも

      // static で共有するとうまくいく
      static HDC hDC;

      if ( msg == WM_CREATE )
      {
        HDC hDC = GetDC( hWnd );

        hFont = CreateFont();
        SelectObject( hDC, hFont );

      }
      if ( msg == WM_PAINT )
      {
        // Font が Default に戻る
        HDC hDC = GetDC( hWnd );

        TextOut( hDC );
      }
___

■ ReleaseDC

SYNTAX int ReleaseDC( HWND hWnd, // ウィンドウハンドル HDC hDC // デバイスコンテキストハンドル ); DESC デバイスコンテキストを解放し 他のアプリケーションが利用できるようにする ReleaseDC() の効果は デバイスコンテキストのタイプによって異なる POINT 共通デバイスコンテキスト, ウィンドウデバイスコンテキストだけを解放します クラスデバイスコンテキスト, プライベートデバイスコンテキストには効果がない ( 意味がないということ )
___

■ CreateDC

SYNTAX HDC CreateDC( LPCTSTR lpszDriver, // ドライバ名 LPCTSTR lpszDevice, // デバイス名 LPCTSTR lpszOutput, // 未使用 NULL にする CONST DEVMODE *lpInitData // オプションのプリンタデータ ); DESC 指定されたデバイスのデバイスコンテキストを、指定の名前で作成 NULL で終わる文字列へのポインタを指定 この文字列は 「DISPLAY」または 1 個のプリンタプロバイダの名前(通常は「WINSPOOL」)を保持
___

■ DeleteDC

SYNTAX BOOL DeleteDC( HDC hdc // デバイスコンテキストのハンドル ); DESC 指定されたデバイスコンテキストを削除 WARNING アプリケーションは GetDC() を使ってデバイスコンテキストのハンドルを取得した場合 DeleteDC() を呼び出してそのハンドルを削除してはなりません 代わりに ReleaseDC() を呼びデバイスコンテキストを解放すること

NINJAIDX 17