提一个对话框显示bmp的问题
一个对话框显示bmp图片,点一个按钮出现选择图片,选好后显示出来,如果图片太大,可以拖动滚动条来查看,最好有整个工程直接显示在对话框上,像背景图像,不要显示在某个控件里...
一个对话框显示bmp图片,点一个按钮出现选择图片,选好后显示出来,如果图片太大,可以拖动滚动条来查看,最好有整个工程
直接显示在对话框上,像背景图像,不要显示在某个控件里 展开
直接显示在对话框上,像背景图像,不要显示在某个控件里 展开
3个回答
展开全部
环境像他胡闭们说的那样,具体代裤码裂码:仅供参模镇考。
void CShowimageDlg::OnButton1()
{
CFileDialog dlg(TRUE,"bmp",".bmp",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"位图文件(*.BMP)|*.BMP||");
if(dlg.DoModal()==IDOK)
{
hwnd = GetDlgItem(IDC_PIC); //IDC_PIC为图片控件ID
hDesDC = hwnd->GetDC()->m_hDC;
hSrcDC = CreateCompatibleDC(hDesDC);
hBitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),dlg.GetPathName(),IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
GetObject(hBitmap, sizeof BITMAP, &bm);
SelectObject(hSrcDC, hBitmap);
hwnd->GetClientRect(&rect);
::SetStretchBltMode(hDesDC,COLORONCOLOR);
::StretchBlt(hDesDC, rect.left, rect.top, rect.right, rect.bottom, hSrcDC, 0, 0, bm.bmWidth, bm.bmHeight,+SRCCOPY);
UpdateData(false);
}
}
void CShowimageDlg::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();
}
}
void CShowimageDlg::OnButton1()
{
CFileDialog dlg(TRUE,"bmp",".bmp",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"位图文件(*.BMP)|*.BMP||");
if(dlg.DoModal()==IDOK)
{
hwnd = GetDlgItem(IDC_PIC); //IDC_PIC为图片控件ID
hDesDC = hwnd->GetDC()->m_hDC;
hSrcDC = CreateCompatibleDC(hDesDC);
hBitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),dlg.GetPathName(),IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
GetObject(hBitmap, sizeof BITMAP, &bm);
SelectObject(hSrcDC, hBitmap);
hwnd->GetClientRect(&rect);
::SetStretchBltMode(hDesDC,COLORONCOLOR);
::StretchBlt(hDesDC, rect.left, rect.top, rect.right, rect.bottom, hSrcDC, 0, 0, bm.bmWidth, bm.bmHeight,+SRCCOPY);
UpdateData(false);
}
}
void CShowimageDlg::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();
}
}
展开全部
懒碰念得写整个工程代码。给你几个关键的地方吧。
1.装入图像文件。CFileDialog 打开文件,类型过滤器设置一下。
2.如果只是显示bmp 图片,可以使用 LoadImage 装入图像文件(具体看MSDN上的说明),得到的是一个hbitmap句柄。
3.定义一个兼容dc
CDC* pdc= GetDC();
m_MemDC.CreateCompatibleDC(pdc);
ReleaseDC(pdc);
m_MemDC.SelectObject( hbitmap);
4.假设对话框的图像显示区范围是, CRect m_rcShowBmp;(对话框客户区)。
5.响应Wm_paint消息,改吵码里面加。
int nShowX= m_rcShowBmp.left;
int nShowY= m_rcShowBmp.top;
dc.BitBlt( nShowX, nShowY, m_rcShowBmp.Width(), m_rcShowBmp.Height(),
&m_MemDC, m_nStartX, m_nStartY, SRCCPY);
6.上面5中加了 nShowX, nShowY, 使用核哪了,源DC坐标,m_nStartX, m_nStartY,就是为了控制图像的拖动,(同时支持ScroolBar控制的)。记录当前源dc起始位置,执行计算吧。没那么复杂。
7.ScrollBar,可以在对话框创建的时候设置属性(默认的窗口属性 WS_VSCROLL,WS_HSCROLL ),使用GetScrollBarCtrl, GetScrollBarInfo 等函数来操纵ScrollBar的位置,显示范围等属性。
8,具体的自己琢磨一下。关键的上面都说了
1.装入图像文件。CFileDialog 打开文件,类型过滤器设置一下。
2.如果只是显示bmp 图片,可以使用 LoadImage 装入图像文件(具体看MSDN上的说明),得到的是一个hbitmap句柄。
3.定义一个兼容dc
CDC* pdc= GetDC();
m_MemDC.CreateCompatibleDC(pdc);
ReleaseDC(pdc);
m_MemDC.SelectObject( hbitmap);
4.假设对话框的图像显示区范围是, CRect m_rcShowBmp;(对话框客户区)。
5.响应Wm_paint消息,改吵码里面加。
int nShowX= m_rcShowBmp.left;
int nShowY= m_rcShowBmp.top;
dc.BitBlt( nShowX, nShowY, m_rcShowBmp.Width(), m_rcShowBmp.Height(),
&m_MemDC, m_nStartX, m_nStartY, SRCCPY);
6.上面5中加了 nShowX, nShowY, 使用核哪了,源DC坐标,m_nStartX, m_nStartY,就是为了控制图像的拖动,(同时支持ScroolBar控制的)。记录当前源dc起始位置,执行计算吧。没那么复杂。
7.ScrollBar,可以在对话框创建的时候设置属性(默认的窗口属性 WS_VSCROLL,WS_HSCROLL ),使用GetScrollBarCtrl, GetScrollBarInfo 等函数来操纵ScrollBar的位置,显示范围等属性。
8,具体的自己琢磨一下。关键的上面都说了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
使用用vScrollBar、hScrollBar控制颂埋蠢pictureBox控件显示图片,实液团现滚动条的效果。代码:
在Form1放入panel、pictureBox、vScrollBar、hScrollBar控件。
在Load事件中添野陪加代码:
hScrollBar1.Maximum = pictureBox1.Width-this.panel1.Width;
vScrollBar1.Maximum = pictureBox1.Height - panel1.Height;
给vScrollBar控件添加Scroll事件代码:
pictureBox1.Top = -vScrollBar1.Value;
给 hScrollBar控件添加Scroll事件代码:
pictureBox1.Left = -hScrollBar1.Value;
具体自己改吧
要工程的话具体联系吧
楼主用一斤的力气可以做的事,没必要用一百斤,控件时做出来是让人用的,用控件能达到同样的效果为什么不用呢?花一百斤的力气去写一个一斤的代码,哎
在Form1放入panel、pictureBox、vScrollBar、hScrollBar控件。
在Load事件中添野陪加代码:
hScrollBar1.Maximum = pictureBox1.Width-this.panel1.Width;
vScrollBar1.Maximum = pictureBox1.Height - panel1.Height;
给vScrollBar控件添加Scroll事件代码:
pictureBox1.Top = -vScrollBar1.Value;
给 hScrollBar控件添加Scroll事件代码:
pictureBox1.Left = -hScrollBar1.Value;
具体自己改吧
要工程的话具体联系吧
楼主用一斤的力气可以做的事,没必要用一百斤,控件时做出来是让人用的,用控件能达到同样的效果为什么不用呢?花一百斤的力气去写一个一斤的代码,哎
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询