请教!有一个程序被别的东西挡住之后自己不会刷新,我能写个程序让他刷新吗?谢谢! 请教!有一个程序被别的东西挡住之后自己不会刷新,我能写个程序让他刷新吗?谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我试着这样:VOID CALLBACK myTimerProc(HWND hwnd,UINT uMsg,UINT_PTR idEvent,DWORD dwTime){ if(idEvent==1) { HWND hWnd =::FindWindow(NULL,"chat"); CWnd* MyWnd; MyWnd=CWnd::FromHandle(hWnd); //::SendMessage(hWnd, WM_PAINT, 0, 0);//这句无作用。 MyWnd->Invalidate();//用了这句以后,有两个问题,如下: }}问题1:chat程序有两个窗口阿A和B。其他程序C.在A里面,好像是成功了,的确不停得在刷新,任何东西都不能盖在上面了(但C的确又在A德上面,因为我用鼠标点一下C的位置,C会闪一下,但马上又被刷新了)……(问题1)在B里面,问题依然存在,被一个东西C挡住了,就停止了刷新,我拖动C,结果屏幕上全是C残像.问题依然存在。莫非不是用的Invalidate来控制?我又试了UpdateWindow,还是没有作用。(问题2)请大侠们帮忙啊! 为什么不这样想:改写你的程序,让它可以自动刷新。一般都要在WM_PAINT的消息处理函数中写上刷新的代码。 :-) 那是个什么程序,居然自己不会刷新的?你可以得到他的句柄,HWND CWnd *再让他刷新(Invalidate)就是啦。 问题1:在你调用以上代码后再调用Invalidate刷新一下你自己。问题2:用FindWindowEx可以找到B窗口的句丙,然后也刷新它一下。 不行,程序好像不是使用的Invalidate.... 既然你的窗口已经被别的窗口挡住了,你还要刷新他干什么啊??你在怎么刷新别人也看不到啊.如果你是想让别的窗口不能盖住你的窗口的话,你应该是给窗口加上一个TOPMOST风格.至于你说B窗口上面留下的是一些残影,有两个可能,第一是你的B窗口没有响应WM_PAINT消息,第二是在MFC中你没有响应WM_ERASEBKGND消息.(重载了消息处理函数,但是没有做处理) 先把它弄到最上一层来: HWND handle=FindWindowEx(NULL,NULL,NULL,"Winamp 播放清单编辑器"); if(handle) { ::ShowWindow(handle,SW_SHOWNORMAL); ::SetForegroundWindow(handle); } 系统冒出来字后Invalidate,不用时刻刷新 有些程序不是前台窗口时是不刷新的,他可能就根本不响应onpaint,比如一些opengl庫里的窗口。他们自己写了消息循环,过驴了wm_paint消息。如果是这样的程序是不能通过发消息解决的,只能把他激活为前面的窗口,分析到这后,如何激活楼上几位都有不同方法,我不说了。刷新以后,再还原。不过,这种根新,实时性不是很好,但只能这样。 麻烦大家解释一下一段关于MFC的代码 vc不能调用真正的pascal库吧, 已经不支持了? 请教IOCP TransmitFile 传输文件的问题 请问如何开通BLOG啊? 请教:如何判断文本框中输入的是数字?? 如何提取CString str("你好")中每一个字节的内容。 怎样正确处理COMBOBOX的消息??SDK 这难道有错? 有高手用过DataGrid吗?能不能告诉我其用法?本人在此先谢了! 还是刚刚我发的那个two_d类的问题,又不会了:(帮帮我好吗? 程序非法操作的状态检测 WM_MOUSELEAVE的问题
VOID CALLBACK myTimerProc(HWND hwnd,UINT uMsg,UINT_PTR idEvent,DWORD dwTime)
{ if(idEvent==1)
{
HWND hWnd =::FindWindow(NULL,"chat");
CWnd* MyWnd;
MyWnd=CWnd::FromHandle(hWnd);
//::SendMessage(hWnd, WM_PAINT, 0, 0);//这句无作用。
MyWnd->Invalidate();//用了这句以后,有两个问题,如下:
}
}
问题1:chat程序有两个窗口阿A和B。其他程序C.
在A里面,好像是成功了,的确不停得在刷新,任何东西都不能盖在上面了(但C的确又在A德上面,因为我用鼠标点一下C的位置,C会闪一下,但马上又被刷新了)……(问题1)在B里面,问题依然存在,被一个东西C挡住了,就停止了刷新,我拖动C,结果屏幕上全是C残像.问题依然存在。莫非不是用的Invalidate来控制?我又试了UpdateWindow,还是没有作用。(问题2)请大侠们帮忙啊!
一般都要在WM_PAINT的消息处理函数中写上刷新的代码。
问题2:用FindWindowEx可以找到B窗口的句丙,然后也刷新它一下。
如果你是想让别的窗口不能盖住你的窗口的话,你应该是给窗口加上一个TOPMOST风格.至于你说B窗口上面留下的是一些残影,有两个可能,第一是你的B窗口没有响应WM_PAINT消息,
第二是在MFC中你没有响应WM_ERASEBKGND消息.(重载了消息处理函数,但是没有做处理)
HWND handle=FindWindowEx(NULL,NULL,NULL,"Winamp 播放清单编辑器");
if(handle)
{
::ShowWindow(handle,SW_SHOWNORMAL);
::SetForegroundWindow(handle);
}
如果是这样的程序是不能通过发消息解决的,只能把他激活为前面的窗口,分析到这后,如何激活楼上几位都有不同方法,我不说了。刷新以后,再还原。
不过,这种根新,实时性不是很好,但只能这样。