窗口子类化EDIT控件

发布时间:2017年12月12日 作者:未知 查看次数:1133

(VC6)新建默认的Win32 Application,在资源中建立IDD_MAIN对话框,对话框上建立IDC_EDIT1、IDC_EDIT2,其中IDC_EDIT1属性(Styles)将Multiline和Want return勾选。


修改代码:

===================================


#include "stdafx.h"

#include "resource.h"



BOOL CALLBACK mTestProc(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam);

LRESULT CALLBACK mEditCldClassProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);



WNDPROC h_pOldEditProc;



int APIENTRY WinMain(HINSTANCE hInstance,

                     HINSTANCE hPrevInstance,

                     LPSTR     lpCmdLine,

                     int       nCmdShow)

{


DialogBoxParam(hInstance,MAKEINTRESOURCE(IDD_MAIN),0,mTestProc,NULL);


return 0;

}




BOOL CALLBACK mTestProc(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)

{

RECT tRect;

switch(message)

{

case WM_CLOSE:

EndDialog(hDlg,NULL);

break;

case WM_INITDIALOG:

h_pOldEditProc = (WNDPROC)::SetWindowLong(GetDlgItem(hDlg,IDC_EDIT1), GWL_WNDPROC,(LONG)mEditCldClassProc);

break;

case WM_COMMAND:

switch(LOWORD(wParam))

{

case IDC_BUTTON1:

break;

default:

break;

}

break;

default:

return(FALSE);

}

return(TRUE);

}



LRESULT CALLBACK mEditCldClassProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)

{

switch(uMsg)

{

case WM_KEYUP:

{

WORD wLow = LOWORD(wParam);

switch(wLow)

{

case VK_RETURN:

MessageBox(hWnd,"a","a",0);

break;

default:

{

char tBuf[22];

GetDlgItemText(GetParent(hWnd),IDC_EDIT1,tBuf,20);

SetDlgItemText(GetParent(hWnd),IDC_EDIT2,tBuf);

}

break;

}

}

break;

default:

break;

}

//传递默认消息处理函数

return CallWindowProc(h_pOldEditProc,hWnd, uMsg, wParam, lParam);

// return h_pOldSmsEditProc(hWnd, uMsg, wParam, lParam);

}


===================================




版权所有!www.sieye.cn
E.Mail:sieye@sohu.com QQ:66697110