如何在一个对话框上贴图?

seedwq 2003-05-30 04:55:40
我想在登陆对话框上加张图片,怎么做?
...全文
153 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
seedwq 2003-05-31
  • 打赏
  • 举报
回复
syl08341 2003-05-30
  • 打赏
  • 举报
回复
agree awnucel(中国间谍)
kaqiusa 2003-05-30
  • 打赏
  • 举报
回复
void CBitmapDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting

SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

// Center icon in client rectangle
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;

// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}

//绘制背景
CRect rectClip,rectTile;
CDC dcMem,*pDC;
CBitmap bmBackground;
bmBackground.LoadBitmap(IDB_BG); //IDB_BG为背景图ID

//背景尺寸
CSize sizeBg =GetBitmapSize(bmBackground);
pDC = GetDC();
dcMem.CreateCompatibleDC(pDC);
CBitmap *pbmOld=dcMem.SelectObject(&bmBackground);

pDC->GetClipBox(&rectClip);
rectTile=CRect(0,0,sizeBg.cx,sizeBg.cy);
while (rectTile.top<=rectClip.bottom)
{
while (rectTile.left<=rectClip.right)
{
if (!(rectTile & rectClip).IsRectEmpty())
pDC->BitBlt(rectTile.left,rectTile.top, sizeBg.cx,sizeBg.cy,&dcMem,
0,0,SRCCOPY);
rectTile.left+=sizeBg.cx;
rectTile.right+=sizeBg.cx;
}
rectTile.left=0; rectTile.right=sizeBg.cy;
rectTile.top+=sizeBg.cy; rectTile.bottom+=sizeBg.cy;
}
dcMem.SelectObject(pbmOld);
dcMem.DeleteDC();
}

// 取得位图大小
CSize GetBitmapSize(const CBitmap&bitmap)
{
BITMAP stBitmap;
bitmap.GetObject (sizeof (BITMAP), &stBitmap);
return CSize(stBitmap.bmWidth, stBitmap.bmHeight);
}

只用这两个函数就OK了
mlin2000 2003-05-30
  • 打赏
  • 举报
回复
加个picture控件,属性 类型选BITMAP,
HBITMAP hbmp=(HBITMAP)LoadImage(NULL,_T(path),IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE);
CStatic* p_bitmap=(CStatic*)GetDlgItem(IDC_P_BITMAP);
p_bitmap->SetBitmap(hbmp);
p_bitmap->MoveWindow(pos_x,pos_y,width,height);//控制图片的位置大小
曾经的猎狐 2003-05-30
  • 打赏
  • 举报
回复
建立一个CBitmap 对象 bmp;
和一个CBrush m_brBk;
响应WM_CTLCOLOR消息,
然后在

BOOL CW05Dlg::OnInitDialog()
{
bmp.LoadBitmap(IDB_BITMAP);
m_brBk.CreatePatternBrush(&bmp);
bmp.DeleteObject(); //OnInitDialog里加入这几行
}

然后在在

HBRUSH CDialog1::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(pWnd==this)
{
return m_brBk;
}
}
孤必有邻 2003-05-30
  • 打赏
  • 举报
回复
给个例子,对话框加载背景图
http://www.yangning.com/cgi-bin/topic.cgi?forum=1&topic=8&show=0
triggerd 2003-05-30
  • 打赏
  • 举报
回复
加个picture控件,属性 类型选BITMAP,
HBITMAP hbmp=(HBITMAP)LoadImage(NULL,_T(path),IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE);
CStatic* p_bitmap=(CStatic*)GetDlgItem(IDC_P_BITMAP);
p_bitmap->SetBitmap(hbmp);
p_bitmap->MoveWindow(pos_x,pos_y,width,height);//控制图片的位置大小
Automatic 2003-05-30
  • 打赏
  • 举报
回复
在对话框的OnPaint函数里贴上去就可以了;
void CSplashDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting

// TODO: Add your message handler code here
/************将你的封面图片贴在对话框上***********/
CBitmap bmp;
CBitmap* pOldBmp;
BITMAP b;
CRect rect;
CDC memDC;

GetClientRect(rect);
memDC.CreateCompatibleDC(&dc);
bmp.LoadBitmap(IDB_BITMAP2);
bmp.GetBitmap(&b);

pOldBmp=(CBitmap*)memDC.SelectObject(&bmp);

dc.StretchBlt(0,0,rect.Width(),rect.Height(),&memDC,0,0,b.bmWidth,b.bmHeight,SRCCOPY);
memDC.SelectObject(pOldBmp);
/************************************************************/
// Do not call CDialog::OnPaint() for painting messages
}

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧