How to set font for single control in Dialog?

giorgiogio48 20 Reputation points
2023-06-16T16:22:01.3433333+00:00

Hello everybody,

I cannot set the font size for a single control in a Dialog

Please help me.

Greetings

Developer technologies | C++
{count} votes

17 answers

Sort by: Most helpful
  1. giorgiogio48 20 Reputation points
    2023-06-17T04:41:37.9633333+00:00

    Hello,

    thank you for intervention. I am using MFC with c++ language. Rather than windows forms I am using Dialogs.

    I learned that to set font size for single controI I need write some rows of code.

    Yes WM_SETFONT, but how? I attempted more than one approach but unsuccessfully.


  2. giorgiogio48 20 Reputation points
    2023-06-17T07:31:24.1033333+00:00

    I have looked at 'change font for edit control', but my problem is not solved. Probably I need more explanation. I am a newbie of c++. Excuse me!


  3. RLWA32 49,636 Reputation points
    2023-06-17T10:58:58.9433333+00:00

    The following example is a dialog that contains two edit controls. The example creates a larger font than the dialog is using and has the second edit control use the larger font. The work is in the CMFCFontSizeDlg::OnInitDialog function.

    Example Dialog -

    ExampleDialog

    Header file for dialog class -

    
    // MFCFontSizeDlg.h : header file
    //
    
    #pragma once
    
    
    // CMFCFontSizeDlg dialog
    class CMFCFontSizeDlg : public CDialogEx
    {
    // Construction
    public:
        CMFCFontSizeDlg(CWnd* pParent = nullptr);	// standard constructor
    
    // Dialog Data
    #ifdef AFX_DESIGN_TIME
        enum { IDD = IDD_MFCFONTSIZE_DIALOG };
    #endif
    
        protected:
        virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV support
    
    
    // Implementation
    protected:
        HICON m_hIcon;
    
        // Generated message map functions
        virtual BOOL OnInitDialog();
        afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
        afx_msg void OnPaint();
        afx_msg HCURSOR OnQueryDragIcon();
        DECLARE_MESSAGE_MAP()
    public:
        CString m_str1;
        CString m_str2;
        CEdit m_Edit1;
        CEdit m_Edit2;
        CFont m_NewFont;
    };
    

    Dialog class .cpp file -

    
    // MFCFontSizeDlg.cpp : implementation file
    //
    
    #include "pch.h"
    #include "framework.h"
    #include "MFCFontSize.h"
    #include "MFCFontSizeDlg.h"
    #include "afxdialogex.h"
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    
    
    // CAboutDlg dialog used for App About
    
    class CAboutDlg : public CDialogEx
    {
    public:
        CAboutDlg();
    
    // Dialog Data
    #ifdef AFX_DESIGN_TIME
        enum { IDD = IDD_ABOUTBOX };
    #endif
    
        protected:
        virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
    
    // Implementation
    protected:
        DECLARE_MESSAGE_MAP()
    };
    
    CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)
    {
    }
    
    void CAboutDlg::DoDataExchange(CDataExchange* pDX)
    {
        CDialogEx::DoDataExchange(pDX);
    }
    
    BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
    END_MESSAGE_MAP()
    
    
    // CMFCFontSizeDlg dialog
    
    
    
    CMFCFontSizeDlg::CMFCFontSizeDlg(CWnd* pParent /*=nullptr*/)
        : CDialogEx(IDD_MFCFONTSIZE_DIALOG, pParent)
    {
        m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
        m_str1 = _T("This is string 1");
        m_str2 = _T("This is string 2");
    }
    
    void CMFCFontSizeDlg::DoDataExchange(CDataExchange* pDX)
    {
        CDialogEx::DoDataExchange(pDX);
        DDX_Control(pDX, IDC_EDIT1, m_Edit1);
        DDX_Control(pDX, IDC_EDIT2, m_Edit2);
        DDX_Text(pDX, IDC_EDIT1, m_str1);
        DDX_Text(pDX, IDC_EDIT2, m_str2);
    }
    
    BEGIN_MESSAGE_MAP(CMFCFontSizeDlg, CDialogEx)
        ON_WM_SYSCOMMAND()
        ON_WM_PAINT()
        ON_WM_QUERYDRAGICON()
    END_MESSAGE_MAP()
    
    
    // CMFCFontSizeDlg message handlers
    
    BOOL CMFCFontSizeDlg::OnInitDialog()
    {
        CDialogEx::OnInitDialog();
    
        // Add "About..." menu item to system menu.
    
        // IDM_ABOUTBOX must be in the system command range.
        ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
        ASSERT(IDM_ABOUTBOX < 0xF000);
    
        CMenu* pSysMenu = GetSystemMenu(FALSE);
        if (pSysMenu != nullptr)
        {
            BOOL bNameValid;
            CString strAboutMenu;
            bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
            ASSERT(bNameValid);
            if (!strAboutMenu.IsEmpty())
            {
                pSysMenu->AppendMenu(MF_SEPARATOR);
                pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
            }
        }
    
        // Set the icon for this dialog.  The framework does this automatically
        //  when the application's main window is not a dialog
        SetIcon(m_hIcon, TRUE);			// Set big icon
        SetIcon(m_hIcon, FALSE);		// Set small icon
    
        // TODO: Add extra initialization here
    
        LOGFONT lf{};
        CFont* pFont = m_Edit2.GetFont(); // Get initial font
        pFont->GetLogFont(&lf); // Use LOGFONT to get font information
        lf.lfHeight = 120; // Use to create 12 point font
        m_NewFont.CreatePointFontIndirect(&lf); // Create a 12 point font
        m_Edit2.SetFont(&m_NewFont, TRUE); // Have edit control use the 12 point font
    
        return TRUE;  // return TRUE  unless you set the focus to a control
    }
    
    void CMFCFontSizeDlg::OnSysCommand(UINT nID, LPARAM lParam)
    {
        if ((nID & 0xFFF0) == IDM_ABOUTBOX)
        {
            CAboutDlg dlgAbout;
            dlgAbout.DoModal();
        }
        else
        {
            CDialogEx::OnSysCommand(nID, lParam);
        }
    }
    
    // If you add a minimize button to your dialog, you will need the code below
    //  to draw the icon.  For MFC applications using the document/view model,
    //  this is automatically done for you by the framework.
    
    void CMFCFontSizeDlg::OnPaint()
    {
        if (IsIconic())
        {
            CPaintDC dc(this); // device context for painting
    
            SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
    
            // Center icon in client rectangle
            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;
    
            // Draw the icon
            dc.DrawIcon(x, y, m_hIcon);
        }
        else
        {
            CDialogEx::OnPaint();
        }
    }
    
    // The system calls this function to obtain the cursor to display while the user drags
    //  the minimized window.
    HCURSOR CMFCFontSizeDlg::OnQueryDragIcon()
    {
        return static_cast<HCURSOR>(m_hIcon);
    }
    
    
    0 comments No comments

  4. giorgiogio48 20 Reputation points
    2023-06-17T15:47:15.5533333+00:00

    Hello RLWA32,

    thank you for support.

    I've followed your post. But 'm getting a lot of errors. Perhaps I didn't understand your suggestions.


  5. giorgiogio48 20 Reputation points
    2023-06-19T08:04:31.2366667+00:00

    Hello Minxin Yu,

    I followed your suggestions, but encountered a lot of errors


Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.