MFC消息数组及批量刷新控件

MFC 消息组映射:(前提是控件ID保持连续性)
在.h文件中声明消息响应函数:
afx_msg void OnMyColor(UINT uID);

在.cpp文件中添加消息映射:
BEGIN_MESSAGE_MAP(ColorDlg, CDialogEx) 
    ON_COMMAND_RANGE(IDC_STATIC0,IDC_STATIC7,OnMyColor) 
 END_MESSAGE_MAP()

在函数实现中判断ID:

void ColorDlg::OnMyColor(UINT uID)
{
 UINT index=uID-IDC_STATIC0;
    CString num;
 num.Format(_T("%d"),index);
 //AfxMessageBox(num);
 this->m_currentColor = this->m_colors[index];
 this->OnPaint();


/
控件使用数组变量批量刷新:
在.H文件中声明控件数组和变量数组:
 CStatic m_colorCtrls[8];
 COLORREF m_colors[8];
在.CPP文件中的DoDataExChange中添加映射:
void ColorDlg::DoDataExchange(CDataExchange* pDX)
{
 CDialogEx::DoDataExchange(pDX);
 DDX_Control(pDX, IDC_STATIC0, m_colorCtrls[0]);
 DDX_Control(pDX, IDC_STATIC1, m_colorCtrls[1]);
 DDX_Control(pDX, IDC_STATIC2, m_colorCtrls[2]);
 DDX_Control(pDX, IDC_STATIC3, m_colorCtrls[3]);
 DDX_Control(pDX, IDC_STATIC4, m_colorCtrls[4]);
 DDX_Control(pDX, IDC_STATIC5, m_colorCtrls[5]);
 DDX_Control(pDX, IDC_STATIC6, m_colorCtrls[6]);
 DDX_Control(pDX, IDC_STATIC7, m_colorCtrls[7]);
}
 
在OnPaint()中添加绘制代码:
void ColorDlg::OnPaint()
{
 CPaintDC dc(this); // device context for painting
 CDC *pDC = this->m_colorCurrentCtrl.GetDC();
 CRect rct;
 m_colorCurrentCtrl.GetWindowRect(&rct);
 CBrush brs;
 brs.CreateSolidBrush(this->m_currentColor);
 CRect picrct;
 picrct.top = 0;
 picrct.left = 0;
 picrct.bottom = rct.Height();
 picrct.right = rct.Width();
 pDC->FillRect(&picrct, &brs);
 
 //刷新8个
 for(int i = 0 ; i < 8 ; i++)
 {
  CDC *pDC = this->m_colorCtrls[i].GetDC();
  CRect rct;
  m_colorCtrls[i].GetWindowRect(&rct);
  CBrush brs;
  brs.CreateSolidBrush(this->m_colors[i]);
  CRect picrct;
  picrct.top = 0;
  picrct.left = 0;
  picrct.bottom = rct.Height();
  picrct.right = rct.Width();
  pDC->FillRect(&picrct, &brs);
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值