{
if(m_path=="") //判断图片路径是否存在
{
return;
}
hwnd = GetDlgItem(IDC_Showing);
hDesDC = hwnd->GetDC()->m_hDC;
hSrcDC = CreateCompatibleDC(hDesDC);
hBitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),m_path,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);
}
这段代码的作用是从某个目录中读取一幅图片,然后在图像控件中显示出来,我想知道,这段代码里一条语句具体是什么意思
跪求高手指点啊,
5 个解决方案
#1
void CPicShowDlg::ShowPic()
{
if(m_path == "") // 判断图片路径是否存在
{
return;
}
hwnd = GetDlgItem(IDC_Showing); // 获取控件窗口句柄
hDesDC = hwnd->GetDC()->m_hDC; // 通过控件窗口句柄取得绘图目标窗口DC(可以理解为绘图工具)
hSrcDC = CreateCompatibleDC(hDesDC); // 创建与窗口DC兼容的内存DC
hBitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(), // 加载位图资源,获取资源句柄
m_path,IMAGE_BITMAP,0,0,
LR_LOADFROMFILE|LR_CREATEDIBSECTION);
GetObject(hBitmap, sizeof(BITMAP), &bm); // 这句话应该和绘图无关
SelectObject(hSrcDC, hBitmap); // 将位图选入内存DC,补充:这句话有点儿问题,容易造成资源泄露应这样写 ::DeleteObject(::SelectObject(hSrcDC, hBitmap));
hwnd->GetClientRect(&rect); // 获取目标窗口矩形区域
::SetStretchBltMode(hDesDC,COLORONCOLOR); // 设置绘制模式(自动缩放适应窗口大小)
::StretchBlt(hDesDC, rect.left, rect.top, rect.right, rect.bottom, hSrcDC, // 将内存DC中的图形绘制到控件窗口中
0, 0, bm.bmWidth, bm.bmHeight,+SRCCOPY);
UpdateData(false); // 刷新窗口
}
#2
不会自己查查吗?
#3
1 要学基本语法
2要装MSDN
3要到GOOGLE,BAIDU去搜索
然后你就是专家了
2要装MSDN
3要到GOOGLE,BAIDU去搜索
然后你就是专家了
#4
好详细·~~~~
#5
您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了 疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知
见此回复三日内无回应
我们将强制结帖
相关规定详见界面 界面版关于版主结帖工作的具体办法
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了 疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知
见此回复三日内无回应
我们将强制结帖
相关规定详见界面 界面版关于版主结帖工作的具体办法
#1
void CPicShowDlg::ShowPic()
{
if(m_path == "") // 判断图片路径是否存在
{
return;
}
hwnd = GetDlgItem(IDC_Showing); // 获取控件窗口句柄
hDesDC = hwnd->GetDC()->m_hDC; // 通过控件窗口句柄取得绘图目标窗口DC(可以理解为绘图工具)
hSrcDC = CreateCompatibleDC(hDesDC); // 创建与窗口DC兼容的内存DC
hBitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(), // 加载位图资源,获取资源句柄
m_path,IMAGE_BITMAP,0,0,
LR_LOADFROMFILE|LR_CREATEDIBSECTION);
GetObject(hBitmap, sizeof(BITMAP), &bm); // 这句话应该和绘图无关
SelectObject(hSrcDC, hBitmap); // 将位图选入内存DC,补充:这句话有点儿问题,容易造成资源泄露应这样写 ::DeleteObject(::SelectObject(hSrcDC, hBitmap));
hwnd->GetClientRect(&rect); // 获取目标窗口矩形区域
::SetStretchBltMode(hDesDC,COLORONCOLOR); // 设置绘制模式(自动缩放适应窗口大小)
::StretchBlt(hDesDC, rect.left, rect.top, rect.right, rect.bottom, hSrcDC, // 将内存DC中的图形绘制到控件窗口中
0, 0, bm.bmWidth, bm.bmHeight,+SRCCOPY);
UpdateData(false); // 刷新窗口
}
#2
不会自己查查吗?
#3
1 要学基本语法
2要装MSDN
3要到GOOGLE,BAIDU去搜索
然后你就是专家了
2要装MSDN
3要到GOOGLE,BAIDU去搜索
然后你就是专家了
#4
好详细·~~~~
#5
您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了 疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知
见此回复三日内无回应
我们将强制结帖
相关规定详见界面 界面版关于版主结帖工作的具体办法
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了 疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知
见此回复三日内无回应
我们将强制结帖
相关规定详见界面 界面版关于版主结帖工作的具体办法