void CALLBACK TimerProc(HWND hwnd ,UINT uMsg, UINT idEvent,DWORD dwTime)
{
HDC hdc=::GetDC(child_hwnd);
HDC hmainWndDc=::GetDC(g_main_hwnd);
RECT child_rect;
::GetWindowRect(child_hwnd,&child_rect);
rect.left+=2;
::BitBlt(hdc,0,0,child_rect.right-child_rect.left,child_rect.bottom,child_rect.top,hmainWndDc,child_rect.left,child_rect.top,SRCCOPY);
::SetWindowPos(child_hwnd,HWND_TOPMOST,oldRect.left,oldRect.top,NULL,NULL,SWP_NOSIZE);
}
上面定时器间隔为100ms,其中child_hwnd为一个背景画刷为NULL_BRUSH(我处理了WM_ERASEBKGNDLE,直接返回1),我希望该窗口能够透明并移动,能完全溶于主窗口g_main_hwnd的背景,不要告诉我用SetLayeredWindowAttributes函数,我还有其他的功能,所以必须是如上面的方法来处理,关键问题时那个子窗口始终是显示创建时所在区域的背景,而不是随着位置改变而动态改变背景
求高手解释下原因,感激,新手没分,不甚感激!!
{
HDC hdc=::GetDC(child_hwnd);
HDC hmainWndDc=::GetDC(g_main_hwnd);
RECT child_rect;
::GetWindowRect(child_hwnd,&child_rect);
rect.left+=2;
::BitBlt(hdc,0,0,child_rect.right-child_rect.left,child_rect.bottom,child_rect.top,hmainWndDc,child_rect.left,child_rect.top,SRCCOPY);
::SetWindowPos(child_hwnd,HWND_TOPMOST,oldRect.left,oldRect.top,NULL,NULL,SWP_NOSIZE);
}
上面定时器间隔为100ms,其中child_hwnd为一个背景画刷为NULL_BRUSH(我处理了WM_ERASEBKGNDLE,直接返回1),我希望该窗口能够透明并移动,能完全溶于主窗口g_main_hwnd的背景,不要告诉我用SetLayeredWindowAttributes函数,我还有其他的功能,所以必须是如上面的方法来处理,关键问题时那个子窗口始终是显示创建时所在区域的背景,而不是随着位置改变而动态改变背景
求高手解释下原因,感激,新手没分,不甚感激!!
解决方案 »
- 用户界面线程的主对话框中使用ShockWave控件,对话框无法创建成功
- 关于线程的问题!!!
- 关于windows程序界面的移值问题
- 3D引擎开发
- 在多线程中调用activex控件
- 有没有会VC+mysql数据库的,工作2-3年的,正在找工作的?
- 有一个API得到17XX年到现在的秒数,是什么来着?
- 请教关于IDispatch::Invoke(...)函数的详细参数问题?
- 怎么才能更新菜单(不用ONUPDATECOMMANDUI),在别的地方!
- windows中将一个目录设定为共享目录的API是哪个呀?
- 关于在diaolog中的static text
- 怎么用CSocket和CAsyncSocket这两个类编写一个简单的通信
ScreenToClient( LPRECT lpRect )