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)