|
2014/03/07(Fri) 14:22:08 編集(投稿者) 2014/03/07(Fri) 14:19:35 編集(投稿者)
現在書いているOnPaint()の全文になります。 pFont、tmpFontについてはCSplashDlgクラスのメンバ変数とし、 デストラクタでDeleteObject(pFont)/DeleteObject(tmpFont)を行っています。
定数WIDTH、HEIGHTはともに const int WIDTH/HEIGHT = 256としています。
void CSplashDlg::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: ここにメッセージ ハンドラー コードを追加します。 // 描画メッセージで CDialogEx::OnPaint() を呼び出さないでください。
HICON m_hIcon = (HICON)::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME), IMAGE_ICON, 0, 0, 0); DrawIconEx(dc.m_hDC, 0, 0, m_hIcon, WIDTH, HEIGHT, 0, NULL, DI_NORMAL); pFont = dc.GetCurrentFont(); //現在のフォントを取得
LOGFONT logFont; pFont->GetLogFont(&logFont); //現在のフォントからLOGFONTを取得
_tcscpy_s(logFont.lfFaceName, sizeof(logFont.lfFaceName), _T("MS Pゴシック")); //フォントをMS Pゴシックにする
logFont.lfHeight = (LONG)(logFont.lfHeight * 1.5); //フォントの高さをもとに変更する。1.5倍が丁度良い位の大きさなので、LONGにキャストし、小数点を丸める logFont.lfWidth = 0; //lfWidthに0を設定するとlfHeightで指定した大きさから自動的に設定される logFont.lfWeight = FW_BOLD; //太字にする //logFont.lfQuality = ANTIALIASED_QUALITY; //アンチエイリアスがサポートされていたら有効にする tmpFont.CreateFontIndirect(&logFont); //変更後のCFontを作成 dc.SelectObject(&tmpFont); //変更後のフォントを設定する dc.SetBkMode(TRANSPARENT); //文字背景を透過にする
CString msg(_T("起動準備中...")); RECT rect; int offset = 3; //ドロップシャドウの影を描画する為のオフセット
//ドロップシャドウ(に見えるように)を描画 SetRect(&rect, 0, 0, WIDTH + offset, HEIGHT + offset); dc.DrawText(msg, &rect, DT_CENTER | DT_SINGLELINE | DT_VCENTER);
//文字を描画 SetRect(&rect, 0, 0, WIDTH, HEIGHT); //文字描画用の矩形を設定する dc.SetTextColor(RGB(255, 255, 255)); dc.DrawText(msg, &rect, DT_CENTER | DT_SINGLELINE | DT_VCENTER); //矩形中央に文字を描画する。(DT_SINGLELINEにしないとDT_VCENTERが有効にならない) dc.SelectObject(pFont); //フォントを元に戻す }
|