下面是一个edit 的子类化:
m_hEdit=CreateEdit(hwnd);
WNDPROC EdOldProc = (WNDPROC)SetWindowLong(m_hEdit, GWL_WNDPROC, (LONG)EDProc);
SetProp(m_hEdit,// handle of window
"EditOldProc", // atom or address of string
EdOldProc);//
m_hEdit=CreateEdit(hwnd);
WNDPROC EdOldProc = (WNDPROC)SetWindowLong(m_hEdit, GWL_WNDPROC, (LONG)EDProc);
SetProp(m_hEdit,// handle of window
"EditOldProc", // atom or address of string
EdOldProc);//
解决方案 »
- CWnd的派生类OnPait响应方法问题
- 如何实现在任意窗口获取鼠标选中的文本内容?谢谢
- 100分求助!!请高手进来看看!(来者有分)!
- 请问如何写一个能在局域网里发送消息的程序?
- 在VC++ 使用Windows media player组件 如何获得影片的播放时间
- 学好VC++的十大良好习惯(立华软件园)
- 大家有知道亿阳信通的吗?偶要去,但不知道怎么样?请介绍。散分。
- 今天一天了,我实在没办法了,进来求个答案,怎么判断文件为视频还是音频文件,望大侠相助!
- 诚邀高手进来谈谈windows平台上各种程序应用框架的优略
- 急急急急!!!!急需求购一本〈〈深入浅出MFC〉〉书!!!!!
- RGM程序
- vc 动态加载动态库后,怎么定义可以全局使用
LRESULT CALLBACK EDProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{// get oldproc
WNDPROC OldEdProc=(WNDPROC)GetProp(hWnd,"EditOldProc");
char buf[100]= {0};
switch(Msg)
{
case WM_NOTIFY:
// OutputDebugString("notify\n");
break;
case WM_KEYUP:
// OutputDebugString("WM_KEYUP\n");
break;
case WM_CHAR:
if((TCHAR) wParam==VK_RETURN)
{
CallWindowProc(OldEdProc, hWnd, Msg, wParam, lParam);
POINT pt;
DWORD pos;
int idx;
// insert the indent
GetCaretPos(&pt);
pos=SendMessage(hWnd,EM_CHARFROMPOS,0,MAKELPARAM(pt.x, pt.y));
idx=LOWORD(pos);
SendMessage(hWnd,EM_SETSEL,idx,idx);
SendMessage(hWnd,EM_REPLACESEL,0,(LPARAM)" ");
return 0;
}
break;
#if 0
case WM_PAINT:
hdc=BeginPaint(hWnd,&ps);
// WS_BORDER
Rectangle(hdc,ps.rcPaint.left,ps.rcPaint.top,ps.rcPaint.right,ps.rcPaint.bottom);
// ES_MULTILINE
lines=SendMessage(hWnd,EM_GETLINECOUNT,0,0);
for(jj=0;jj<lines;jj++)
{// use GetWindowText will lost CR
got=SendMessage(hWnd,EM_GETLINE,jj,(LPARAM)txt);
txt[got]=0;
if(jj==1)
{
SetTextColor(hdc,RGB(255,0,0));
TextOut(hdc,2,2 + jj*16,txt,got);
}
else
{
SetTextColor(hdc,RGB(0,0,0));
TextOut(hdc,2,2 + jj*16,txt,got);
}
}
EndPaint(hWnd,&ps);
return 0;
#endif
}
return CallWindowProc(OldEdProc, hWnd, Msg, wParam, lParam);
}