您的位置:首页 > 其它

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

2013-10-06 22:32 288 查看
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);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: