主窗体为CDialog类型OnInitDialog时设置成透明(按钮等都在这个窗体),,然后创建伪装窗口m_hFakeWnd,在此伪装窗口上画按钮等(在画按钮时通过gdi+),因为需要用到浏览网页,使用了CHtmlView类,发现向CHtmlView发送WM_PRINT时得到的是黑屏,后来想到CHtmlView加到另一窗体上pchild,在主窗体上当成成员变量,这是发现可以显示,但每次都需要点击子窗体一下或者移动一下窗体才显示,
主窗体OnPaint()时如果调用CDialog::OnPaint();那么子窗体显示。关键是通过gdi+向m_hFakeWnd画背景的话每次把pchild覆盖了,但每次都需要点击子窗体一下或者移动一下窗体子窗体才显示,并且背景不覆盖,
该怎么做?现在脑子有点乱,希望大家能看明白我的意思
主窗体OnPaint()时如果调用CDialog::OnPaint();那么子窗体显示。关键是通过gdi+向m_hFakeWnd画背景的话每次把pchild覆盖了,但每次都需要点击子窗体一下或者移动一下窗体子窗体才显示,并且背景不覆盖,
该怎么做?现在脑子有点乱,希望大家能看明白我的意思
GDI+和GDI一起用,好像没法透明。印象是这样的。
if (m_pWebChildDlg)
{
::PostMessage( m_pWebChildDlg->GetSafeHwnd(), WM_MOUSEACTIVATE, 529714, 33619969);
::PostMessage( m_pWebChildDlg->GetSafeHwnd(), 70, 0, 1242980);
::PostMessage( m_pWebChildDlg->GetSafeHwnd(), 71, 0, 1242980);
::PostMessage( m_pWebChildDlg->GetSafeHwnd(), 134, 1, 1446480);
::PostMessage( m_pWebChildDlg->GetSafeHwnd(), 6, 2, 1446480);
::PostMessage( m_pWebChildDlg->GetSafeHwnd(), 1024, 0, 0);
}
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections\DefaultConnectionSettings
SavedLegacySettings
pChildWnd->ShowWindow(SW_SHOW);所有的操作显示对象(包括CHtmlView)都在此上面,pChildWnd用SetLayeredWindowAttributes(this->GetSafeHwnd(),0xff00ff,0,1); 来透明。
但遇到新问题,在拖动、最小化时都显示正常,但是最大化窗口然后还原后,在拖动窗体时又延迟(在视觉上窗体上按钮等移动老是比较窗体移动慢一拍,明显感觉图像背景和按钮等是两层),该怎么解决呢,最大化我是这样的void CFrmMain::OnBnClickedButtonMax()
{
// TODO: 在此添加控件通知处理程序代码
if (m_bMax == FALSE)
{
m_bMax = TRUE;
m_pParent->ShowWindow(SW_SHOWMAXIMIZED);
}
else
{
m_bMax = FALSE;
m_pParent->ShowWindow(SW_NORMAL);
}
}