首先,在登录窗口的头文件中添加如下代码,声明控件对象:
```cpp
CFont m_font; // 字体对象
CStatic m_staticFont; // 显示字体名称的静态文本框
CComboBox m_comboFontSize; // 字号下拉框
CButton m_btnColor; // 颜色按钮
```
然后在 OnInitDialog 函数中初始化这些控件对象:
```cpp
BOOL CLoginDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 初始化字体对象
m_font.CreateFont(20, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, _T("宋体"));
// 设置静态文本框的字体
m_staticFont.SetFont(&m_font);
// 向字号下拉框中添加选项
m_comboFontSize.AddString(_T("16"));
m_comboFontSize.AddString(_T("18"));
m_comboFontSize.AddString(_T("20"));
m_comboFontSize.AddString(_T("22"));
m_comboFontSize.AddString(_T("24"));
// 设置默认选中的字号
m_comboFontSize.SetCurSel(2);
// 设置颜色按钮的背景色
m_btnColor.SetColor(RGB(255, 0, 0));
return TRUE;
}
```
在 OnCtlColor 函数中设置控件的字体和颜色:
```cpp
HBRUSH CLoginDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
if (pWnd == &m_staticFont || pWnd == &m_comboFontSize || pWnd == &m_btnColor)
{
// 设置字体
pDC->SelectObject(&m_font);
// 设置颜色
pDC->SetTextColor(RGB(0, 0, 255));
pDC->SetBkColor(RGB(255, 255, 255));
// 返回白色背景刷子
return (HBRUSH)GetStockObject(WHITE_BRUSH);
}
return hbr;
}
```
最后,在按钮的单击事件中弹出对话框让用户设置字体、字号和颜色:
```cpp
void CLoginDlg::OnBtnSetFont()
{
// 弹出字体对话框
CFontDialog dlgFont(&m_font);
if (dlgFont.DoModal() == IDOK)
{
// 设置静态文本框的字体
m_staticFont.SetFont(&m_font);
}
}
void CLoginDlg::OnBtnSetColor()
{
// 弹出颜色对话框
CColorDialog dlgColor(m_btnColor.GetColor());
if (dlgColor.DoModal() == IDOK)
{
// 设置颜色按钮的背景色
m_btnColor.SetColor(dlgColor.GetColor());
}
}
```
完整代码如下:
```cpp
// LoginDlg.h
#pragma once
#include "afxwin.h"
class CLoginDlg : public CDialogEx
{
public:
CLoginDlg(CWnd* pParent = nullptr);
enum { IDD = IDD_LOGIN_DIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX);
protected:
virtual BOOL OnInitDialog();
afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
afx_msg void OnBtnSetFont();
afx_msg void OnBtnSetColor();
DECLARE_MESSAGE_MAP()
private:
CFont m_font; // 字体对象
CStatic m_staticFont; // 显示字体名称的静态文本框
CComboBox m_comboFontSize; // 字号下拉框
CButton m_btnColor; // 颜色按钮
};
```
```cpp
// LoginDlg.cpp
#include "stdafx.h"
#include "Login.h"
#include "LoginDlg.h"
#include "afxdialogex.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
CLoginDlg::CLoginDlg(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_LOGIN_DIALOG, pParent)
{
}
void CLoginDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_STATIC_FONT, m_staticFont);
DDX_Control(pDX, IDC_COMBO_FONT_SIZE, m_comboFontSize);
DDX_Control(pDX, IDC_BTN_COLOR, m_btnColor);
}
BEGIN_MESSAGE_MAP(CLoginDlg, CDialogEx)
ON_WM_CTLCOLOR()
ON_BN_CLICKED(IDC_BTN_SET_FONT, &CLoginDlg::OnBtnSetFont)
ON_BN_CLICKED(IDC_BTN_COLOR, &CLoginDlg::OnBtnSetColor)
END_MESSAGE_MAP()
BOOL CLoginDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 初始化字体对象
m_font.CreateFont(20, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, _T("宋体"));
// 设置静态文本框的字体
m_staticFont.SetFont(&m_font);
// 向字号下拉框中添加选项
m_comboFontSize.AddString(_T("16"));
m_comboFontSize.AddString(_T("18"));
m_comboFontSize.AddString(_T("20"));
m_comboFontSize.AddString(_T("22"));
m_comboFontSize.AddString(_T("24"));
// 设置默认选中的字号
m_comboFontSize.SetCurSel(2);
// 设置颜色按钮的背景色
m_btnColor.SetColor(RGB(255, 0, 0));
return TRUE;
}
HBRUSH CLoginDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
if (pWnd == &m_staticFont || pWnd == &m_comboFontSize || pWnd == &m_btnColor)
{
// 设置字体
pDC->SelectObject(&m_font);
// 设置颜色
pDC->SetTextColor(RGB(0, 0, 255));
pDC->SetBkColor(RGB(255, 255, 255));
// 返回白色背景刷子
return (HBRUSH)GetStockObject(WHITE_BRUSH);
}
return hbr;
}
void CLoginDlg::OnBtnSetFont()
{
// 弹出字体对话框
CFontDialog dlgFont(&m_font);
if (dlgFont.DoModal() == IDOK)
{
// 设置静态文本框的字体
m_staticFont.SetFont(&m_font);
}
}
void CLoginDlg::OnBtnSetColor()
{
// 弹出颜色对话框
CColorDialog dlgColor(m_btnColor.GetColor());
if (dlgColor.DoModal() == IDOK)
{
// 设置颜色按钮的背景色
m_btnColor.SetColor(dlgColor.GetColor());
}
}
```