我把一张位图贴到界面上,然后又贴了位图按钮,可是位图按钮周围有残缺,很难看,影响了界面的美观,请问有什么办法解决?代码如下:贴位图按钮以及位图按钮的位置初始化:void CMyDlg::InitFace()
{
MoveWindow(200,200,309,103);//初始程序大小
m_main.LoadBitmap(IDB_MAINFACE); //帮按钮读位图,分别是正常状态和按下状态的两张位图
m_play.LoadBitmaps(IDB_PLAY1,IDB_PLAY3);
m_stop.LoadBitmaps(IDB_STOP1,IDB_STOP3);
m_open.LoadBitmaps(IDB_OPEN1,IDB_OPEN3);
m_bexit.LoadBitmaps(IDB_EXITNOM,IDB_EXITFOC);
m_bhelp.LoadBitmaps(IDB_HELPNOM,IDB_HELPFOC);
m_bmini.LoadBitmaps(IDB_MININOM,IDB_MINIFOC);
m_per.LoadBitmaps(IDB_PERNOM,IDB_PERFOC);
m_next.LoadBitmaps(IDB_NEXTNOM,IDB_NEXTFOC);
m_pop.LoadBitmaps(IDB_POPNOM,IDB_POPFOC);
m_play.MoveWindow(13,58,40,40,false); //设置每个控件的位置,大小
m_stop.MoveWindow(52,62,40,30,false);
m_open.MoveWindow(88,59,40,30,false);
m_bexit.MoveWindow(280,0,19,19,false);
m_bmini.MoveWindow(260,0,19,19,false);
m_bhelp.MoveWindow(240,0,19,19,false);
m_pop.MoveWindow(280,22,20,78,false);
m_per.MoveWindow(125,55,40,40,false);
m_next.MoveWindow(160,55,40,40,false);
m_slider.MoveWindow(10,45,160,10,false);
m_volume.MoveWindow(210,55,15,45,false);
}
利用设备上下文将位图贴到界面上:void CMyDlg::OnPaint()
{
CPaintDC dc(this);//显示主界面
CRect rect;
GetClientRect(&rect);
CDC MemDC;
MemDC.CreateCompatibleDC(&dc);
MemDC.SelectObject(&m_main);
dc.BitBlt(0,0,rect.Width(),rect.Height(),&MemDC,NULL,NULL,SRCCOPY); m_list.MoveWindow(305,10,150,80);
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();
}
}
然后在OnInitDialog()里调用InitFace()请问我应该怎样做才能解决问题?谢谢
{
MoveWindow(200,200,309,103);//初始程序大小
m_main.LoadBitmap(IDB_MAINFACE); //帮按钮读位图,分别是正常状态和按下状态的两张位图
m_play.LoadBitmaps(IDB_PLAY1,IDB_PLAY3);
m_stop.LoadBitmaps(IDB_STOP1,IDB_STOP3);
m_open.LoadBitmaps(IDB_OPEN1,IDB_OPEN3);
m_bexit.LoadBitmaps(IDB_EXITNOM,IDB_EXITFOC);
m_bhelp.LoadBitmaps(IDB_HELPNOM,IDB_HELPFOC);
m_bmini.LoadBitmaps(IDB_MININOM,IDB_MINIFOC);
m_per.LoadBitmaps(IDB_PERNOM,IDB_PERFOC);
m_next.LoadBitmaps(IDB_NEXTNOM,IDB_NEXTFOC);
m_pop.LoadBitmaps(IDB_POPNOM,IDB_POPFOC);
m_play.MoveWindow(13,58,40,40,false); //设置每个控件的位置,大小
m_stop.MoveWindow(52,62,40,30,false);
m_open.MoveWindow(88,59,40,30,false);
m_bexit.MoveWindow(280,0,19,19,false);
m_bmini.MoveWindow(260,0,19,19,false);
m_bhelp.MoveWindow(240,0,19,19,false);
m_pop.MoveWindow(280,22,20,78,false);
m_per.MoveWindow(125,55,40,40,false);
m_next.MoveWindow(160,55,40,40,false);
m_slider.MoveWindow(10,45,160,10,false);
m_volume.MoveWindow(210,55,15,45,false);
}
利用设备上下文将位图贴到界面上:void CMyDlg::OnPaint()
{
CPaintDC dc(this);//显示主界面
CRect rect;
GetClientRect(&rect);
CDC MemDC;
MemDC.CreateCompatibleDC(&dc);
MemDC.SelectObject(&m_main);
dc.BitBlt(0,0,rect.Width(),rect.Height(),&MemDC,NULL,NULL,SRCCOPY); m_list.MoveWindow(305,10,150,80);
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();
}
}
然后在OnInitDialog()里调用InitFace()请问我应该怎样做才能解决问题?谢谢
解决方案 »
- 过年了,估计都闲下来了吧,帮忙支个招
- MFC窗口标题?
- visual c++中sprint有个奇怪的现象,使用sprintf之后一个不相关的变量值发生了改变
- Dll进入点函数中GetThreadId()无法定位,为什么?
- ACE Proactor模式的一个问题(使用ACE Proactor开发的朋友来看看吧.)
- 请问如何响应控件的Ctrl+A的按键消息?
- 一个关于进程的问题!
- 请问如何在调用dos命令的同时不显示dos窗口?
- 如何抓得鼠标的图标(bmp也行)?
- !!!!!!!!!!!打不开数据库???????????????????
- 急急急急急急!!!!那位高手能够帮帮忙!
- RPC服务不可用?
一是贴在按钮上的位图没有处理好,造成毛边,可以用photoshop放大后修正一下