VC这段代码什么意思
来源:百度知道 编辑:UC知道 时间:2024/07/05 03:03:22
NeWWndProc函数处理是为了使edit中只能输入0-9和+,-号和backspace
typedef LONG FAR (PASCAL *WndProc)( HWND hWnd,unsigned message,WORD wParam,LONG lParam);
WndProc OldEditWnd;
LONG FAR PASCAL NeWWndProc( HWND hWnd,
unsigned message,
WORD wParam,
LONG lParam)
{
switch(message)
{
case WM_CHAR:
if((wParam>'9'||wParam <'0')&&(wParam!='-'&&wParam!='+'&&wParam!='\b'))
{
return 0;
}
default:
if(OldEditWnd != NULL)
OldEditWnd(hWnd,message,wParam,lParam);
}
}
typedef LONG FAR (PASCAL *WndProc)( HWND hWnd,unsigned message,WORD wParam,LONG lParam);
WndProc OldEditWnd;
LONG FAR PASCAL NeWWndProc( HWND hWnd,
unsigned message,
WORD wParam,
LONG lParam)
{
switch(message)
{
case WM_CHAR:
if((wParam>'9'||wParam <'0')&&(wParam!='-'&&wParam!='+'&&wParam!='\b'))
{
return 0;
}
default:
if(OldEditWnd != NULL)
OldEditWnd(hWnd,message,wParam,lParam);
}
}
typedef LONG FAR (PASCAL *WndProc)( HWND hWnd,unsigned message,WORD wParam,LONG lParam);
这个用WndProc类型来代替有后面3个参数的回调函数类型的指针类型。
WndProc OldEditWnd; 这里就是定义了这种类型的一种变量.
LONG FAR PASCAL NeWWndProc( HWND hWnd,
unsigned message,
WORD wParam,
LONG lParam)
{
switch(message)
{
case WM_CHAR:
if((wParam>'9'||wParam <'0')&&(wParam!='-'&&wParam!='+'&&wParam!='\b'))
{
return 0;
}
这一段就是窗口处理函数(用户自己的)
OldEditWnd(hWnd,message,wParam,lParam);
这个就是留给操作系统默认处理的,其中的OldEditWnd为一个函数指针变量
这段代码根本没有必要,可以由CEdit派生一个新的类,并重载PreTranslateMessage函数,在该函数中对WM_CHAR消息中的字符进行过滤即可,类似于NewWndProc
你都说出来了, 还有什么看不懂