この記事は2019年06月13日に投稿しました。
目次
リンク
1. はじめに
こんにちは、iOSのエディタアプリPWEditorの開発者の二俣です。
今回は業務で使用しているMFCでフォントサイズを変更する方法についてです。
2. MFCでフォントサイズを変更する
MFCでフォントサイズを変更する方法ですが、以下のような手順になります。
- CFontのインスタンス変数を用意します。
- コンストラクタでCFontのCreatePointFont関数でフォントを生成します。 この関数でフォントサイズとフォント種別を指定します。
- OnInitDialog関数で、フォントを変更したいコントロール(実装例ではラベル)にフォントを設定します。
- OnDestroy関数でフォントの後始末を行います。
実装例
MFCFontSizeDlg.h
// MFCFontSizeDlg.h : ヘッダー ファイル // #pragma once // CMFCFontSizeDlg ダイアログ class CMFCFontSizeDlg : public CDialogEx { // コンストラクション public: CMFCFontSizeDlg(CWnd* pParent = NULL); // 標準コンストラクター // ダイアログ データ enum { IDD = IDD_MFCFONTSIZE_DIALOG }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV サポート // 実装 protected: HICON m_hIcon; // 生成された、メッセージ割り当て関数 virtual BOOL OnInitDialog(); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); DECLARE_MESSAGE_MAP() public: afx_msg void OnDestroy(); // 追加します。 private: CFont m_smallFont; // 追加します。 CFont m_midiumFont; // 追加します。 CFont m_largeFont; // 追加します。 };
MFCFontSizeDlg.cpp
// MFCFontSizeDlg.cpp : 実装ファイル // #include "stdafx.h" #include "MFCFontSize.h" #include "MFCFontSizeDlg.h" #include "afxdialogex.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // CMFCFontSizeDlg ダイアログ CMFCFontSizeDlg::CMFCFontSizeDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CMFCFontSizeDlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); // フォントを生成します。 m_smallFont.CreatePointFont(80, _T("MS ゴシック")); m_midiumFont.CreatePointFont(160, _T("MS ゴシック")); m_largeFont.CreatePointFont(240, _T("MS ゴシック")); } void CMFCFontSizeDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CMFCFontSizeDlg, CDialogEx) ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_WM_DESTROY() END_MESSAGE_MAP() // CMFCFontSizeDlg メッセージ ハンドラー BOOL CMFCFontSizeDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // このダイアログのアイコンを設定します。アプリケーションのメイン ウィンドウがダイアログでない場合、 // Framework は、この設定を自動的に行います。 SetIcon(m_hIcon, TRUE); // 大きいアイコンの設定 SetIcon(m_hIcon, FALSE); // 小さいアイコンの設定 // 各ラベルにフォントを設定します。 GetDlgItem(IDC_LB_SMALL)->SetFont(&m_smallFont); GetDlgItem(IDC_LB_MIDIUM)->SetFont(&m_midiumFont); GetDlgItem(IDC_LB_LARGE)->SetFont(&m_largeFont); return TRUE; // フォーカスをコントロールに設定した場合を除き、TRUE を返します。 } // ダイアログに最小化ボタンを追加する場合、アイコンを描画するための // 下のコードが必要です。ドキュメント/ビュー モデルを使う MFC アプリケーションの場合、 // これは、Framework によって自動的に設定されます。 void CMFCFontSizeDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 描画のデバイス コンテキスト SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // クライアントの四角形領域内の中央 int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // アイコンの描画 dc.DrawIcon(x, y, m_hIcon); } else { CDialogEx::OnPaint(); } } // ユーザーが最小化したウィンドウをドラッグしているときに表示するカーソルを取得するために、 // システムがこの関数を呼び出します。 HCURSOR CMFCFontSizeDlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } void CMFCFontSizeDlg::OnDestroy() { CDialogEx::OnDestroy(); // フォントの後始末を行います。 m_smallFont.DeleteObject(); m_midiumFont.DeleteObject(); m_largeFont.DeleteObject(); }
3. おわりに
各コントロールのフォントサイズは通常フォームに設定されたフォントサイズになります。
個々にフォントサイズを変更するには、各コントロールのプロパティで指定でず、上記のような方法になります。
ちょっとめんどくさいです。
リンク
紹介している一部の記事のコードはGitlabで公開しています。
興味のある方は覗いてみてください。
私が勤務しているニューラルでは、主に組み込み系ソフトの開発を行っております。
弊社製品のハイブリッドOS Bi-OSは高い技術力を評価されており、特に制御系や通信系を得意としています。
私自身はiOSモバイルアプリやウィンドウズアプリを得意としております。
ソフトウェア開発に関して相談などございましたら、お気軽にご連絡ください。
また一緒に働きたい技術者の方も随時募集中です。
興味がありましたらご連絡ください。
EMAIL : info-nr@newral.co.jp / m-futamata@newral.co.jp
TEL : 042-523-3663
FAX : 042-540-1688