一个简单的子类化的问题:
各位大虾:小弟用以下的代码怎么好象不行啊?怎么回事?
WNDPROC WndProc=NULL;
HWND hBegin;
LRESULT CALLBACK MyApp(HWND ,UINT,WPARAM,LPARAM);
//---------------------------------------------------------------------------
LRESULT CALLBACK MyApp(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
//WndProc=(WNDPROC)GetWindowLong(hBegin,GWL_WNDPROC);
switch(message)
{
case WM_LBUTTONDOWN:
ShowMessage("haha");
break;
case WM_RBUTTONDOWN:
ShowMessage("heihei");
break;
default:
return DefWindowProc(hwnd,message,wParam,lParam);//1处
// return CallWindowProc(WndProc,hwnd,message,wParam,lParam);//2处。
}
return 0;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// HWND hTool=FindWindow("Shell_TrayWnd",0);
// HWND hBegin=GetWindow(hTool,GW_CHILD);
hBegin=FindWindow(NULL,"qwe");
::WndProc=(WNDPROC)SetWindowLong(唊tton2->Handle,GWL_WNDPROC,(LONG)MyApp);
SetWindowPos(hBegin,HWND_TOP,50,50,50,22,SWP_ASYNCWINDOWPOS|SWP_NOMOVE|SWP_NOSIZE|SWP_NOZORDER|SWP_FRAMECHANGED);
}
其实也就是想设置别的进程的消息处理函数。但因为属不同进程。所以要用SETWINDOWPOS。不知这样用对不对。而且在1处我用2替代也不行。(编译出错。
说类型不匹配)。
谢谢?位大虾的指点。