其余的控件button啊,comobox等等都可以正常显示,就是mediaplayer这个控件会被背景图片覆盖,不知道怎么解决,我逛帖子看到有哥们说刷完背景图片后invidate()控件,我试过,还是不能显示出来,我确定是背景图片把他覆盖了,我去掉背景图片之后就能显示出来onpaint代码如下,求各位大虾帮忙
解决方案 »
- scrollwindow 重影
- Win研究内核?想共同项目?进
- 一个离奇的错误
- 求教:怎样让子DIALOG像主DIALAG最小化后停留在任务栏里,而不是停在屏幕的左小角?
- 毕设急呀,花钱也行.
- #define WM_GET (WM_USER+112) 和 #define WM_GET (WM_APP+112)除了值不同外有区别吗?
- 如何从一段长字符串中提取自己需要的敏感数据的问题
- 我的程序人生——致honganwp (石广大) 以及CSDN上所有刚刚接触编程的人
- 工作线程中调用CoInitialize(NULL); 为什么会失败?
- CButton的问题.
- 请教多媒体定时器及多线程。谢谢。
- 请问高手在CMyDlg类中如何启动CChild类中的多媒体定时器
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);
}
}这是我的onpaint函数,注释的部分是我尝试着invalidate控件, IDC_OCX2是mediaplayer的id,如果打开注释,程序会报错。
有没有加WS_CHILD?
父窗体要加WS_CLIPCHILDREN属性
把添加背景图片的函数写在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;
}