主窗体为CDialog类型OnInitDialog时设置成透明(按钮等都在这个窗体),,然后创建伪装窗口m_hFakeWnd,在此伪装窗口上画按钮等(在画按钮时通过gdi+),因为需要用到浏览网页,使用了CHtmlView类,发现向CHtmlView发送WM_PRINT时得到的是黑屏,后来想到CHtmlView加到另一窗体上pchild,在主窗体上当成成员变量,这是发现可以显示,但每次都需要点击子窗体一下或者移动一下窗体才显示,
主窗体OnPaint()时如果调用CDialog::OnPaint();那么子窗体显示。关键是通过gdi+向m_hFakeWnd画背景的话每次把pchild覆盖了,但每次都需要点击子窗体一下或者移动一下窗体子窗体才显示,并且背景不覆盖,
该怎么做?现在脑子有点乱,希望大家能看明白我的意思

解决方案 »

  1.   

    确实每太看懂,透明确实没有那么容易,你又用了CHtmlView,
    GDI+和GDI一起用,好像没法透明。印象是这样的。
      

  2.   

    唉,郁闷哈,跟踪了一下鼠标点击消息,然后模拟一下,暂时先用着,等待完美解决,唉自己做支持png透明窗体好麻烦呀
    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); 
    }
      

  3.   

    郁闷,怎么程序运行后修改注册表了在没加CHtmlView时运行程序还没有,这两项是干嘛的???
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections\DefaultConnectionSettings
    SavedLegacySettings
      

  4.   

    发现就是CHtmlView 一调用Navigate就向注册表写数据,有谁遇到过?
      

  5.   

    唉,昨天在网上搜了一些VC的例子,发现都写注册表,打开迅雷运行一下发现也是,但是用VB或C#开发的程序中用WebBrowser就不提示,恶心的是360报提示(迅雷也写着两个键但360不报),给用户看到该怎么反应,唉!!
      

  6.   

    你可以直接把CHtmlView的内容,打印到父窗口上。注意,在打开一个网页后,CHtmlView嵌套了四层(要么是五层,具体数字忘了)窗口,你可以把最上面的窗口,穿过几层窗口,直接打印到父窗口。
      

  7.   

    另外在CHtmlView打开网页后,现在对于<img onClick="my.location='my.aspx';"  这样的链接可以打开,但是如果'my.aspx'这个页面中有提示框的话,一直不显示,需要最小化在最大化提示框就显示了,给人的感觉是并没有刷新一样,这个该怎么办呢,
      

  8.   

    目前是这样实现的主窗体UpdateLayeredWindow设为透明,在这个窗体上绘PNG背景,然后在OnCreate时嵌入一个窗体pChildWnd=new CFrmMain(m_hdcMemory,this);pChildWnd->Create(IDD_FRMMAIN);
    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);
    }
    }