而且只能输入一个特定的字符.
解决方案 »
- 关于标题栏位置的取值问题?
- 我在View类里面怎么能够修改在mainframe创建的状态栏上的文本?
- 请问怎样读取二进制文件的内容
- 只有一个DLL,我想知道他的EXPORT的函数,参数,返回值
- 关于滚动条刷新屏幕的问题,高手请进!
- 请大家帮我看看,使用oo4o时运行内存出错的问题,(在5台电脑只有2台可以正常运行)
- 多文件下载遇到的问题??大家帮忙看看!!谢谢!
- csdn的“高手”只能回答低级问题
- 串口通信的问题,急急急!!!
- 求助,一道关于数据结构/算法的面试题
- 从CDilog中继承下来的类系统都自动生成enum {IDD=IDD_DIALOG1};可是当编译时出现"IDD_DIALOG1未定义"时该如何修改?
- vc6 IDE环境里的问题,苦恼
要实现这样的功能,只要在资源编辑器中打开编辑框的属性,在“styles”中将“Password”选项打勾,缺省输入口令时编辑框显示的字符为“*”,但可以使用void SetPasswordChar( TCHAR ch );这个函数修改显示的字符符号。
输入的不同也输出不一样的 东西.
比如,按'A' ----> '甲'
按'B' ----> '乙'
等等.
但是只能输入一个字符.
{
// TODO: Add your specialized code here and/or call the base class
if( WM_KEYDOWN == pMsg->message )
{
CWnd *pWnd = GetFocus();
if( IDC_EDIT1 == pWnd->GetDlgCtrlID() )
{
HWND h = pWnd->GetSafeHwnd();
if( 'A' == pMsg->wParam && GetKeyState( VK_SHIFT ) < 0 )//大写的字符A
{
::SendMessage( h, WM_KEYDOWN, 'B', 0x1f0001 );
::SendMessage( h, WM_CHAR, 'b', 0x1f0001 );
::SendMessage( h, WM_KEYUP, 'B', 0xc01f0001 );
return TRUE;
}
}
}
return CDialog::PreTranslateMessage(pMsg);
}
CWinThread::PUMPMESSAGE()从消息队列中取得WM_KEYDOWM
↓
CWinThread::PreTranslateMessage处理--->使用WalkPreTranslateTree让从该控件遍列其父窗口直到主 窗口,让他们依次处理,如果其中一个处理了则结束循环。
其实是分别调用他们的PreTranslateMessage
↓未处理
::TranslateMessage-->产生WM_CHAR消息放入消息队列(不考虑其他情况)
↓
::DispathMessage -->让该控件窗口消息函数WindowProc处理,遍列消息表找到WM_KEYDOWN的消息影射函数OnKeyDown在其中处理
↓ 未处理
到该控件的DefWindowProc中作最后的处理,如记录按键的次数以供后 面处理。
↓
该消息处理结束,再取的下一个消息WM_CHAR
↓
CWinThread::PreTranslateMessage处理-->和上面处理WM_KEYDOWM一样
可以在CAppDlg::PreTranslateMessage()、CDebugEdit::PreTranslateMessage()、CDebugEdit::WindowProc()、CDebugEdit::OnChar()、CDebugEdit::DefWindowProc()处理输入字符,但后面的必须保证前面消息流正常运行,正确处理之后保证返回true
{
// TODO: Add your specialized code here and/or call the base class
if( WM_KEYDOWN == pMsg->message )
{
CWnd *pWnd = GetFocus();
if( IDC_EDIT1 == pWnd->GetDlgCtrlID() )
{
//HWND h = pWnd->GetSafeHwnd();
if( 'A' == pMsg->wParam && GetKeyState( VK_SHIFT ) < 0 )//大写的字符A
{
//::SendMessage( h, WM_KEYDOWN, 'B', 0x1f0001 );
//::SendMessage( h, WM_CHAR, 'b', 0x1f0001 );
//::SendMessage( h, WM_KEYUP, 'B', 0xc01f0001 );
( ( CEdit * )pWnd )->ReplaceSel( "多少个都行" );
return TRUE;
}
}
}
return CDialog::PreTranslateMessage(pMsg);
}