/*********************/
/* Unicode文字表示 */
/*********************/
#include <stdio.h>
#include <windows.h>
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);
}
|