我是编程的初学者,在编绘图软件的调色板时,编了20多个STATIC的控件用于颜色的选择,但是在消息响应时,我不想加20多个ON_BN_CLICKED,别人告诉我把这20多的STATIC控件添加同一个名的消息响应,然后在消息函数中,用switch判断按的是哪个STATIC,然后对画笔赋值,我想问如何判断我按的是哪个STATIC呢?
我的代码如下,请大家帮忙,谢谢了。//左键获取颜色
void CColorSet::Oncolor()
{
// TODO: Add your control notification handler code here //GetDlgCtrlID();
switch (/*如何判断当前ID?*/)
{
case IDC_COLOR1:
Pencolor=color[1];
break;
case IDC_COLOR2:
Pencolor=color[2];
break;
case IDC_COLOR3:
Pencolor=color[3];
break; }
}
我的代码如下,请大家帮忙,谢谢了。//左键获取颜色
void CColorSet::Oncolor()
{
// TODO: Add your control notification handler code here //GetDlgCtrlID();
switch (/*如何判断当前ID?*/)
{
case IDC_COLOR1:
Pencolor=color[1];
break;
case IDC_COLOR2:
Pencolor=color[2];
break;
case IDC_COLOR3:
Pencolor=color[3];
break; }
}
解决方案 »
- bcg中CBCGPToolbarComboBoxButton的问题
- c++程序员和网络工程师兼学,有公司要这类人吗?
- vc中怎么显示HTML编辑器?
- xml 解析器
- 如何从记事本文件的某行来截取数据?
- 如何实现图像的任意角度旋转,哪位高手有vc实现的源代码?发过来,100相送!
- 看过<<windows核心编程>>的朋友请进
- 请教:com和一般的dll有什么区别联系,com以dll形式提供函数调用,但dll本身也可以提供函数调用,何区别(内空)?
- 救救我,我快要被辞退了,谁能给我这么个程序,当它运行其间所在的电脑上所有的文件变化都能得到,如更名,删除,创建,size,否则老板要要炒我蚰鱼了 [email protected]
- 最基本的问题,请高手回答
- 如何灰掉菜单中的某一项
- 同时访问资源
一般参数里有ID 再switch里判断
ON_CONTROL_RANGE(BN_CLICKED, IDC_COLOR1, IDC_COLOR20, &CColorSet::OnColor)void CColorSet::OnColor(UINT nIndex)
{
// nIndex 就是控件ID
}
{
// TODO: Add your control notification handler code here switch (GetFocus()->GetDlgCtrlID())
{
case IDC_COLOR1:
Pencolor=color[1];
break;
case IDC_COLOR2:
Pencolor=color[2];
break;
case IDC_COLOR3:
Pencolor=color[3];
break; }
}
BOOL CDlgFunc::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(::TranslateAccelerator(AfxGetMainWnd()->m_hWnd,g_hAccelTable,pMsg))
return TRUE;
if(pMsg->message==WM_LBUTTONDOWN)
{
CRect rect;
GetDlgItem(IDC_STATIC_FIRST)->GetWindowRect(&rect);
if(rect.PtInRect(pMsg->pt))
{
Pencolor=color[1];
}
GetDlgItem(IDC_STATIC_SECOND)->GetWindowRect(&rect);
if(rect.PtInRect(pMsg->pt))
{
Pencolor=color[2];
}
}
}
return TRUE; 删除掉。另外在后面加上return CDialog::PreTranslateMessage(pMsg);
BOOL CDlgFunc::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message==WM_LBUTTONDOWN)
{
CRect rect;
GetDlgItem(IDC_STATIC_FIRST)->GetWindowRect(&rect);
if(rect.PtInRect(pMsg->pt))
{
Pencolor=color[1];
}
GetDlgItem(IDC_STATIC_SECOND)->GetWindowRect(&rect);
if(rect.PtInRect(pMsg->pt))
{
Pencolor=color[2];
}
}
return CDialog::PreTranslateMessage(pMsg);
}
PreTranslateMessage的办法我试了一下是可以的。
看了一下你说的是STATIC控件,,,在你的函数里又是个IDC_COLOR2...如果是static控件的话,貌似没有想按钮一样能得到控件ID,也获取不到焦点。。所以只能获取该static控件的位置。