本人无聊时写程序玩,在程序中用CreateWindow在桌面的句柄上建立一个按钮,发现按钮的确出现在桌面上,但发现那个按钮的消息都无法捕捉,不时说窗口的消息都是由Windows发到窗口建立线程的消息队列中的吗?但为什么在建立按钮的程序收不到消息呢?
解决方案 »
- VC界面如何实现类似QQ设置界面
- 熟悉Java编程,了解c语言,新手学习VC编程,请求推荐的学习资料,谢谢!
- 要应聘普通VC程序员,谁能给一些面试题呀?
- 远程访问的问题
- 求《监听与隐藏》一书的配套程序(作者求是科技谭思亮)
- 重金求解:关于CBitmapButton的问题!!!!
- 菜鸟问的一个低级问题
- 寻找VC++, JAVA网络工程师?
- 有人说写文档占百分之60的时间,编码的时间很少,大家近来讨论讨论如何写文档?-- Version 2.00
- 菜鸟问题:如何在fon字库中找到自己要的字并读取点阵,并以描点的方法画在窗口上?最好有代码。
- 怎样以毫秒显示两个时间之差
- 我在VC中导入ADO 报错,谁能帮我解决
message that is sent to the BUTTON's parent Window.
So the Messages sent from your newly created BUTTON is directed to the Desktop
Window,not your Application's window!
Then 那个按钮的消息都无法捕捉!
Hehe! Os don't let you change it simply!LRESULT CALLBACK ButtonProc(HWND hWnd, UINT nMsg, WPARAM w, LPARAM l)
{
if(nMsg=WM_COMMAND)
::MessageBox(NULL,"Button Clicked","",MB_OK);
return S_OK;
}
//Message Box not called
LRESULT CALLBACK HookedProc(HWND hWnd, UINT nMsg, WPARAM w, LPARAM l)
{
static BOOL bFirst=TRUE;
if(bFirst)
{
::MessageBox(NULL,"Button Clicked","",MB_OK);
bFirst=FALSE;
}
if(nMsg=WM_COMMAND )
{
::MessageBox(NULL,"Button Clicked","",MB_OK); }
return ::CallWindowProc((WNDPROC )g__oldProc,hWnd,nMsg,w,l);
}
//Button created on the Desktop Window!
//0x1007A is Desktop window (Just for simple now)
void CAaaaaaaaaDlg::OnButton1()
{ HWND hWnd= CreateWindow("BUTTON","Btn1",WS_CHILD|WS_VISIBLE,220,220,30,30,(HWND)0x1007A,(HMENU)100,NULL,NULL);
g__oldProc=::GetWindowLong((HWND)0x1007A,GWL_WNDPROC);
SetWindowLong((HWND)0x1007A,GWL_WNDPROC,(long)HookedProc);
}
后来我用spy++跟踪了主窗口的消息,发现在那个桌面按钮上发生消息时,主窗口收到了
WM_KICKIDLE的消息,不知为什么?