控件执行ShowWindow试试,不过好象没作用,你看看控件的透明属性是不是被设上了,或者在初始化函数里动态改变一下大小,再控件.Refresh()就是刷新窗口的函数
解决方案 »
- 很诡秘的问题
- vc++视频传输客户端出错
- activex控件在delphi里面调用,怎么没有onclick事件
- Month Calendar获得计算机时间的奇怪问题!!!
- domodal如何获得窗口的句柄
- 简单问题,关于C++语法!
- 為什麼在adorecordset->close,adoconnection->close 時出現內存寫錯誤???
- error LNK2001: unresolved external symbol _IID_IDirectDraw7
- 请问关于句柄!
- VC和数据库oracle8i,sql server2000的问题;
- vs 开发wince 多进程问题
- I/O完成端口(I/O completion port)中I/O完成队列的理解不清楚
或在VC编辑环境下->菜单编排->使图片tab编号为1
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,(注意是控件,否则小心死循环)
wnd = GetDlgItem(IDC_OCX1);
CRect rect1;
wnd->GetWindowRect(&rect1);
wnd->InvalidateRect(rect1); 1
IDC_OCX1是我的控件id,然后运行到标号为1的语句的时候报错了,于是我把标号为1的语句改为wnd->Invalidate();
但是这样还是错了,请问楼上你所说的把控件invalidate是我这样写么为什么会弹错误
wnd = GetDlgItem(IDC_OCX1);
CRect rect1;
wnd->GetWindowRect(&rect1);
wnd->InvalidateRect(rect1); 1
IDC_OCX1是我的控件id,然后运行到标号为1的语句的时候报错了,于是我把标号为1的语句改为wnd->Invalidate();
但是这样还是错了,请问楼上你所说的把控件invalidate是我这样写么为什么会弹错误
为窗口加了一个bmp背景,然后在窗口上加了一个按钮,结果按钮并没有被覆盖。
因此,怀疑应该是你绘图的问题。
你把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这个控件会被覆盖
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();
}
}
之前纠结是因为写在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;
}
之前纠结是因为写在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;
}
这个函数是怎么添加的?