我在DIALOG上放一个ComboBox控件IDC_COMBO,样式为下拉.我想让它只接受数字输入,所以我派生一个类CMyComBox,映射到IDC_COMBO,处理WM_CHAR消息,如下:
void OnChar(UINT nChar......){
if (nChar=>0 && nChar=<9){
CComboBox::OnChar(UINT nChar......);
}
}可是我在控件中输入字符时,没有效果.跟踪程序执行,发现控件IDC_COMBO跟本没有响应WM_CHAR消息.怎么回事?
各位大侠可以自己试试.CComboBox控件不响应WM_CHAR消息.
void OnChar(UINT nChar......){
if (nChar=>0 && nChar=<9){
CComboBox::OnChar(UINT nChar......);
}
}可是我在控件中输入字符时,没有效果.跟踪程序执行,发现控件IDC_COMBO跟本没有响应WM_CHAR消息.怎么回事?
各位大侠可以自己试试.CComboBox控件不响应WM_CHAR消息.
然后让它只接受数字
edit控件的句柄,但不知道是不是真的有用
我以前是用enum child windows来实现的
1.你可以自己定义一个ComboBox的派生类CYourComboBox
2.然后在对话框的.h文件中声明一个变量 CYourComboBox m_combo
3.在对话框的初始化函数中添加如下代码:
m_combo.SubclassDlgItem(IDC_COMBO,this);
4.在派生类中响应鼠标单击事件
重载Dialog的PreTranslateMessage方法
if( GetFocus()->GetDlgCtrlID() == IDC_YOUR_COMBOBOX )
{
if( pMsg->message == WM_KEYDOWN && !( pMsg->wParam >= '0' && pMsg->wParam <= 9 ) )
{
pMsg->wParam = VK_CTRL;
return TRUE;
}
}
我是菜鸟,有没有简单一点的方法?最直接最好.
void CTestDlg::OnEditupdateCombo1()
{
// TODO: Add your control notification handler code here
DWORD dwSel = m_cb.GetEditSel();
WORD wSel = LOWORD( dwSel );
if( wSel == 0 ) return;
wSel--;
char strEdit[100];
memset( strEdit, 0, 100 );
m_cb.GetWindowText( strEdit, 100 );
if( strEdit[wSel] >= '0' && strEdit[wSel] <= '9' ) return;
strEdit[wSel] = 0;
strcpy( strEdit+wSel, strEdit+wSel+1 );
m_cb.SetWindowText( strEdit );
m_cb.SetEditSel( LOWORD(dwSel), HIWORD(dwSel) );
}
仅仅是测试代码,对边界问题没有做过多考虑,实际应用时应该考虑。
处理CBN_EDITUPDATE应该可以吧//BTW:为什么我的短消息发不出去?