控件执行ShowWindow试试,不过好象没作用,你看看控件的透明属性是不是被设上了,或者在初始化函数里动态改变一下大小,再控件.Refresh()就是刷新窗口的函数

解决方案 »

  1.   

    在对话框上首先加图片,再加其它控件。
    或在VC编辑环境下->菜单编排->使图片tab编号为1
      

  2.   

    2种方法:
    1.用Picture控件,画图的时候用Picture控件的DC,然后确定播放器控件在其之上。2.dc.StretchBlt(0,0,rect.right-rect.left,rect.bottom-rect.top,&memdc,0,0,bkginfo.bmWidth,bkginfo.bmHeight,SRCCOPY);把控件Invalidate,(注意是控件,否则小心死循环)
      

  3.   

    CWnd *wnd;
    wnd = GetDlgItem(IDC_OCX1);
    CRect rect1;
    wnd->GetWindowRect(&rect1);
    wnd->InvalidateRect(rect1); 1
    IDC_OCX1是我的控件id,然后运行到标号为1的语句的时候报错了,于是我把标号为1的语句改为wnd->Invalidate();
    但是这样还是错了,请问楼上你所说的把控件invalidate是我这样写么为什么会弹错误
      

  4.   

    CWnd *wnd;
    wnd = GetDlgItem(IDC_OCX1);
    CRect rect1;
    wnd->GetWindowRect(&rect1);
    wnd->InvalidateRect(rect1); 1
    IDC_OCX1是我的控件id,然后运行到标号为1的语句的时候报错了,于是我把标号为1的语句改为wnd->Invalidate();
    但是这样还是错了,请问楼上你所说的把控件invalidate是我这样写么为什么会弹错误
      

  5.   

    我做了一个简单的测试:
    为窗口加了一个bmp背景,然后在窗口上加了一个按钮,结果按钮并没有被覆盖。
    因此,怀疑应该是你绘图的问题。
    你把OnPaint完整的函数贴出来看看,记得 代码对齐 
      

  6.   

    void CMediaPlayerDlg::OnPaint()
    {
    if (IsIconic())
    {
    CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作矩形中居中
    int cxIcon = GetSystemMetrics(SM_CXICON);
    int cyIcon = GetSystemMetrics(SM_CYICON);
    CRect rect;
    GetClientRect(&rect);
    int x = (rect.Width() - cxIcon + 1) / 2;
    int y = (rect.Height() - cyIcon + 1) / 2; // 绘制图标
    dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
    //用bitmap做背景
    CPaintDC dc(this); 
    CRect rect;
    GetClientRect(&rect);   
    CDC dcMem;   
    dcMem.CreateCompatibleDC(&dc);   
    CBitmap bmpBackground;   
    bmpBackground.LoadBitmap(IDB_BITMAP1);     BITMAP bitmap;   
    bmpBackground.GetBitmap(&bitmap);   
    CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground);   
    dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,   
    bitmap.bmWidth,bitmap.bmHeight,SRCCOPY); //CWnd *a;
    //CRect rect1;
    //a = GetDlgItem(IDC_OCX2);
    //a->GetWindowRect(&rect1);
    //InvalidateRect(&rect1,TRUE); //CDialog::OnPaint(); 
    }
    }
    这是我的onpaint函数,按钮不会什么的不会被背景覆盖,就是window media player这个控件会被覆盖
      

  7.   


    void CMediaPlayerDlg::OnPaint()
    {
    if (IsIconic())
    {
    CPaintDC dc(this); // 用于绘制的设备上下文SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);// 使图标在工作矩形中居中
    int cxIcon = GetSystemMetrics(SM_CXICON);
    int cyIcon = GetSystemMetrics(SM_CYICON);
    CRect rect;
    GetClientRect(&rect);
    int x = (rect.Width() - cxIcon + 1) / 2;
    int y = (rect.Height() - cyIcon + 1) / 2;// 绘制图标
    dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
    //用bitmap做背景
    CPaintDC dc(this);  
    CRect rect;
    GetClientRect(&rect);   
    CDC dcMem;   
    dcMem.CreateCompatibleDC(&dc);   
    CBitmap bmpBackground;   
    bmpBackground.LoadBitmap(IDB_BITMAP1);   BITMAP bitmap;   
    bmpBackground.GetBitmap(&bitmap);   
    CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground);   
    dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,   
    bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);//CWnd *a;
    //CRect rect1;
    //a = GetDlgItem(IDC_OCX2);
    //a->GetWindowRect(&rect1);
    //InvalidateRect(&rect1,TRUE);//CDialog::OnPaint();  
    }
    }
      

  8.   

    你在OnInitDialog中通过Create创建这个player控件试试
      

  9.   

    问题已经解决,不是你这种方法,把添加背景图片的函数写在OnEraseBkgnd()函数里。
    之前纠结是因为写在OnEraseBkgnd()时前面添加了一句CPaintDC dc(this),死活出不来
    实际上是不需要加的,加了就出不来了
    添加完后 return true就行了,楼主请结帖
    OnEraseBkgnd(CDC *pdc)
    {
    CRect rect;
    GetClientRect(&rect);   
    CDC dcMem;   
    dcMem.CreateCompatibleDC(pdc);   
    CBitmap bmpBackground;   
    bmpBackground.LoadBitmap(IDB_BITMAP1);   BITMAP bitmap;   
    bmpBackground.GetBitmap(&bitmap);   
    CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground);   
    pdc->StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,   
    bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);
    return true;
    }
      

  10.   

    问题已经解决,不是你这种方法,把添加背景图片的函数写在OnEraseBkgnd()函数里。
    之前纠结是因为写在OnEraseBkgnd()时前面添加了一句CPaintDC dc(this),死活出不来
    实际上是不需要加的,加了就出不来了
    添加完后 return true就行了,楼主请结帖
    OnEraseBkgnd(CDC *pdc)
    {
    CRect rect;
    GetClientRect(&rect);   
    CDC dcMem;   
    dcMem.CreateCompatibleDC(pdc);   
    CBitmap bmpBackground;   
    bmpBackground.LoadBitmap(IDB_BITMAP1);   BITMAP bitmap;   
    bmpBackground.GetBitmap(&bitmap);   
    CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground);   
    pdc->StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,   
    bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);
    return true;
    }

    这个函数是怎么添加的?