2024年3月20日发(作者:)
CView 与 CDialog 中 OnChar()函数的实现
2009-03-24 9:34
CView 与 CDialog 中 OnChar()函数的实现,即在自定义控件中获取键盘按键消
息。
一、先说说共同的地方吧。
在 各自的 C***View.h 与C***Dlg.h的头文件中 Definition :
1. 定义自定义控件ID
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#define ID_BUTTON 100
#define ID_EDITOR 101
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<
2. 定义实例对象
在class CSerialTest3View : public CView{
public: CEdit myEdit;
}
或
class CTestDlg : public CDialog{
public: Cedit myEdit
}
3. 生成相应消息映射函数--->OnCreate,OnChar
右键点击,生成Windows Message Handle and Event Handle
for C***View/C***Dlg 中
WM_CREATE ----> int C***View::OnCreate(LPCREATESTRUCT
lpCreateStruct)
WM_CHAR ----> void C***View::OnChar(UINT nChar, UINT nRepCnt, UINT
nFlags)
或
WM_CREATE ----> int C***Dlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
WM_CHAR ----> void C***Dlg::OnChar(UINT nChar, UINT nRepCnt, UINT
nFlags)
实现:
C***View
int C***Dlg::OnCreate(LPCREATESTRUCT lpCreateStruct) /////
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;
/*
("TTY 接收",
WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
CRect(500,100,650,180),
this,ID_BUTTON);
ndow(SW_SHOW);
*/
(WS_VISIBLE|WS_CHILD|ES_WANTRETURN|ES_READONLY|
ES_AUTOHSCROLL|ES_AUTOVSCROLL|WS_BORDER|
ES_MULTILINE|ES_LEFT,CRect(30,100,460,360),this,ID_EDITOR);
ndow(SW_SHOW);
//dowText("wwwwwwwwwww");
// TODO: Add your specialized creation code here
return 0;
}
C***View
void C***Dlg::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
UpdateData(1);
CString str;
if(nChar==13)
{
strMsg+="rn";
}
else
{
("%c",nChar);
strMsg+=str;
}
//MessageBox("strMsg");
Beep(1000,10);
dowText(strMsg);
CDialog::OnChar(nChar, nRepCnt, nFlags);
}
二、不同之处
很容易发现在C***View 中容易实现OnChar,
但是, 在C***Dialog中 实现不了?
为何?
Google 一下发现,要重载一个函数 PreTranslateMessage(MSG* pMsg)


发布评论