KotlinとSwiftとVC++(MFC)のアナログ時計で同じのPNG画像を組込む:MFCでの覚えメモ-2
こんにちは。川上です。
前回のMFCのアナログ時計アプリの続き。。。
>次の
>・画像の表示処理
>は、
>void CClockWin2View::OnDraw(CDC* pDC)
>で画像処理(Timer設定無し)のお勉強と復習をしました。
Windowsのアプリで、SDIタイプの描画処理の鉄板関数は、
void CClockWin2View::OnDraw(CDC* pDC)
です。
そこで、始まりのTimer未対応で起動時のアナログ時計の描画処理を
1 2 3 4 5 6 7 8 9 10 11 12 | // CClockWin2View 描画 void CClockWin2View::OnDraw(CDC* pDC) { // -- 背景画像の表示 OnDrawPng3(pDC); // -- 時計時間Txtの表示 OnDrawClockText(pDC); // -- 時計針の表示 OnDrawPngHari(pDC); } |
初期化時の背景画像の処理は、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | // -- 背景画像の表示 -- int CClockWin2View::OnDrawPng3(CDC* pDC) { // TODO: ここに実装コードを追加します. int width, height = 0; //画像の縦幅、横幅を取得します width = m_imgPNG.GetWidth(); height = m_imgPNG.GetHeight(); //画像の描画を行います m_imgPNG.Draw(*pDC, 0, 0, width, height, 0, 0, width, height); return 0; } |
でした。
時計文字盤の表示は、ずっと前に掲載した
”KotlinとSwiftとVC++(MFC)のアナログ時計の文字盤表示処理比べ”
に、日と曜日の暦の処理を追加しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | // -- 時計時間Txtの表示 int CClockWin2View::OnDrawClockText(CDC* pDC) { ・・・ 文字盤表示処理・・ // --- 曜日--- // -- 現在時間 COleDateTime cTime = COleDateTime::GetCurrentTime(); TRACE("%d(%d) %d:%d:%d\n", cTime.GetDay(), cTime.GetDayOfWeek(), cTime.GetHour(), cTime.GetMinute(), cTime.GetSecond()); int day = cTime.GetDay(); int weekday = cTime.GetDayOfWeek(); txt_w = 100; txt_h = 80; double dd = pi / (double)(180) * (double)(getKakudo(3) - 90); double dx = hankei * cos(dd); double dy = hankei * sin(dd); int tt_x = center_x + (int)dx - (txt_w * 2 + txt_w / 4); int tt_y = center_y + (int)dy - txt_h / 2; int tt_r = tt_x + txt_w; int tt_b = tt_y + txt_h; CString weekdays[7] = {_T("日"),_T("月"), _T("火"), _T("水"), _T("木"), _T("金"), _T("土")}; pDC->SetBkColor(RGB(241, 245, 248)); //文字の背景色 LOGFONT lf2; ZeroMemory(&lf2, sizeof(LOGFONT)); _tcscpy_s(lf2.lfFaceName, _T("Arial")); lf2.lfHeight = 60; CFont font2; font2.CreateFontIndirect(&lf2); pDC->SelectObject(&font2); for (int idx = 0; idx < 2; idx++) { if (idx == 0) { //Day disp CString dstr; dstr.Format(_T("%d"), day); pDC->SetTextColor(RGB(16, 74, 60)); // 黒ぽっい CRect rect(tt_x, tt_y, tt_r, tt_b); pDC->DrawText(dstr, -1, rect, DT_CENTER); } else { //Weekday Disp if (weekday == 1) { // 日 pDC->SetTextColor(RGB(255, 0, 0)); //Red } else if (weekday == 7) { //土 pDC->SetTextColor(RGB(0, 0, 255)); //Blue } else { pDC->SetTextColor(RGB(16, 74, 60)); // 黒ぽっい } tt_x += 60; tt_r += 60; CRect rect(tt_x, tt_y, tt_r, tt_b); pDC->DrawText(weekdays[weekday - 1], -1, rect, DT_CENTER); } } pDC->SetTextColor(oldColor); pDC->SelectObject(oldFont); font.DeleteObject(); return 0; } |
でした。
次の「画像回転表示処理」へと続くのでした。。
ではでは。