/*********************/ /* Unicode文字表示 */ /*********************/ #include #include HWND hWnd=NULL; // ウィンドウハンドル MSG msg; // ウィンドウメッセージ int endFG=0; // 終了フラグ void SETwindow(void); // ウィンドウ初期設定 void byouga(void); // 文字描画 LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); // ウィンドウプロシージャ void main( ) { int ir; SETwindow( ); // ウィンドウ初期設定 while( endFG==0 ) { ir=PeekMessage(&msg,hWnd,0,0,PM_REMOVE); // windowsメッセージ取得 if ( ir==0 ) continue; // メッセージなし TranslateMessage(&msg); // メッセージ変換 DispatchMessage (&msg); // メッセージ送出 if ( endFG!=0 ) break; } DestroyWindow(hWnd); // ウィンドウ破棄 } void SETwindow( ) /*----------------------*/ /* ウィンドウ初期設定 */ /*----------------------*/ { WNDCLASS wc; // ウィンドウ クラス DWORD Wstyle; // ウィンドウ・スタイル //--ウィンドウクラス設定-- wc.lpszClassName="Unicode文字表示"; // ウィンドウ・クラス名 wc.lpszMenuName =NULL; // クラス・メニュー・リソース名 wc.hInstance =GetModuleHandle(NULL); // インスタンス・ハンドル wc.lpfnWndProc =WndProc; // ウィンドウ・プロシージャ関数名 wc.hCursor =LoadCursor(NULL,IDC_ARROW); // クラス・カーソル wc.hIcon =NULL; // クラス・アイコン wc.hbrBackground=GetStockObject(BLACK_BRUSH); // クラス背景ブラシ wc.style =CS_OWNDC| // クラス・スタイル CS_BYTEALIGNCLIENT| CS_BYTEALIGNWINDOW; wc.cbClsExtra =0; // 補足クラス・メモリ wc.cbWndExtra =0; // 補足ウィンドウ・メモリ //--ウィンドウ・スタイル設定-- Wstyle= WS_OVERLAPPED| // 自動表示位置 WS_SYSMENU| // 閉じる可能 WS_MINIMIZEBOX; // 最小化可 RegisterClass(&wc); // ウィンドウ・クラス登録 //--ウィンドウ生成-- hWnd=CreateWindow(wc.lpszClassName, // クラス名 wc.lpszClassName, // ウィンドウ名(実行ファイル) Wstyle, // ウィンドウ・スタイル 0, // ウインドウ水平位置 0, // ウインドウ垂直位置 600, // ウィンドウXサイズ(枠含) 100, // ウィンドウYサイズ(枠含) NULL, // 親ウィンドウ・ハンドル NULL, // メニューハンドル wc.hInstance, // アプリケーション・インスタンス・ハンドル NULL); // ウィンドウ作成データ ShowWindow(hWnd,SW_SHOWDEFAULT); // ウィンドウ表示状態設定 } void byouga( ) /*------------*/ /* 画面描画 */ /*------------*/ { HDC hdc; // デバイスコンテキスト ハンドル HFONT hfont; // 論理フォントハンドル WCHAR c[32]; // ワイド文字 hdc=GetDC(hWnd); // ウィンドウのDC取得 SetBkMode(hdc,OPAQUE); // 文字の背景=不透明 SetTextColor(hdc,RGB(255,128, 0)); // テキスト色設定 SetBkColor (hdc,RGB( 0, 0, 0)); // 背景色=黒 //--フォント-- hfont=CreateFont( // フォント・オブジェクト生成 64, // フォントの論理高(ピクセル) 32, // 文字の論理幅(ピクセル) 0, // テキスト行の角度 0, // ベースラインとx軸の角度 FW_THIN, // フォント太さ(標準) FALSE, // イタリック体フラグ 0, // アンダーラインフラグ FALSE, // バーチカルラインフラグ SHIFTJIS_CHARSET, // 文字セット識別子 OUT_TT_PRECIS, // 出力精度 CLIP_TT_ALWAYS, // クリッピング精度 PROOF_QUALITY, // 出力品質 FIXED_PITCH|FF_MODERN, // ピッチ // "メイリオ"); // タイプフェイス名 "MS ゴシック"); // タイプフェイス名 SelectObject(hdc,hfont); // フォント設定 //--文字コード-- c[0]=0x2318; // Unicode c[1]=0x2603; // Unicode c[2]=0x270C; // Unicode c[3]=0x3004; // Unicode c[4]=0x3403; // Unicode c[5]=0x9AD9; // Unicode c[6]=0xAC10; // Unicode TextOutW(hdc,10,5,c,7); // 文字列描画(7文字) DeleteObject(hfont); // フォントオブジェクト削除 ReleaseDC(hWnd,hdc); // ウィンドウのDC 解放 } LRESULT CALLBACK WndProc( /*--------------------------*/ /* ウィンドウプロシージャ */ /*--------------------------*/ HWND hwnd, // ウィンドウ・ハンドル UINT uMsg, // メッセージID WPARAM wParam, // 第1メッセージ・パラメータ(無符号) LPARAM lParam) // 第2メッセージ・パラメータ(有符号) { PAINTSTRUCT hpaint; // 描画情報 BOOL ir=0; switch( uMsg ) { case WM_CLOSE://--ウィンドウ閉-- PostQuitMessage(0); // 実行終了 endFG=1; break; case WM_PAINT://--ウィンドウ更新-- case WM_SETFOCUS://--フォーカス取得-- if ( GetUpdateRect(hwnd,NULL,FALSE)!=0 ) { // 更新リージョンあり BeginPaint(hwnd,&hpaint); byouga( ); // 文字描画 EndPaint(hwnd,&hpaint); } break; default://--その他-- ir=DefWindowProc(hwnd,uMsg,wParam,lParam); } return(ir); }