MFC中下面这段代码里每句话是什么意思?

时间:2022-08-11 23:44:37
void CPicShowDlg::ShowPic() 
{
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去搜索
然后你就是专家了

#4


引用 1 楼 MildSong 的回复:

    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); // 刷新窗口
    }


好详细·~~~~

#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去搜索
然后你就是专家了

#4


引用 1 楼 MildSong 的回复:

    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); // 刷新窗口
    }


好详细·~~~~

#5


您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了 疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面 界面版关于版主结帖工作的具体办法