什么原因导致滚动条出现模糊的现象?

liulin2025 liulin2025 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区


模糊的滚动条 ,注意图片右上角,仔细看,是模糊的.


程序功能:
程序启动,创建内存dc, 选择一张图片,获取图片大小信息,采用双缓冲拷贝到窗口客户区域中。

同时设置滚动条, 因为有的图片可能会比客户区域大, 当然也有的可能会小于窗口客户区域.


当选择了一张小于客户区域的图片的时候,就会出现滚动条模糊,即我贴的图片。


以下是关键代码:



hBitmap=(HBITMAP)LoadImage(GetModuleHandle(NULL),ofn.lpstrFile,0,0,IMAGE_BITMAP,LR_LOADFROMFILE);
if(hBitmap==NULL)
{
::MessageBox(hWnd,_T("加载图片失败,可能是错误的bmp"),NULL,MB_ICONWARNING);
return 0;
}
ZeroMemory(&bitmap,sizeof(BITMAP));
GetObject(hBitmap,sizeof(BITMAP),&bitmap);
m_nHorzMaxSize=bitmap.bmWidth;
m_nVertMaxSize=bitmap.bmHeight;
m_nHorzPos=m_nVertPos=0;

//判断图片与客户区域的大小,分4种,高度多出,宽度多出,高、宽都多出,高宽都没有大于客户区域
RECT rect;
GetClientRect(hWnd,&rect);
if( (bitmap.bmHeight>rect.bottom) && (bitmap.bmWidth>rect.right))
uFlag=BOTH_ABOVE;
else if((bitmap.bmHeight<rect.bottom) && (bitmap.bmWidth>rect.right))
uFlag=ONLY_WIDTH_ABOVE;
else if((bitmap.bmHeight>rect.bottom) && (bitmap.bmWidth<rect.right))
uFlag=ONLY_HEIGHT_ABOVE;
else
uFlag=BOTH_BELOW;


//设置水平滚动条
SCROLLINFO si;
ZeroMemory(&si,sizeof(SCROLLINFO));
si.cbSize=sizeof(SCROLLINFO);
si.fMask=SIF_RANGE|SIF_PAGE;
si.nMax=m_nHorzMaxSize-1;
si.nMin=0;
si.nPage=m_nHorzPageSize;
SetScrollInfo(hWnd,SB_HORZ,&si,TRUE);

//设置垂直滚动条
ZeroMemory(&si,sizeof(SCROLLINFO));
si.cbSize=sizeof(SCROLLINFO);
si.fMask=SIF_RANGE|SIF_PAGE;
si.nMax=m_nVertMaxSize-1;
si.nMin=0;
si.nPage=m_nVertPageSize;
SetScrollInfo(hWnd,SB_VERT,&si,TRUE);

hOldBitmap=(HBITMAP)SelectObject(hMemDc,hBitmap);
DarwPic(hWnd, hMemDc,m_nHorzPos, m_nVertPos,bitmap,uFlag);
return 0;


以下链接是 整个源程序的源码:
http://pan.baidu.com/share/link?shareid=211351&uk=1913319109



...全文

相关推荐

评论 25
收藏 已收藏
分享
返回顶部
liulin2025
VC/MFC 16,550 成员 421,606 内容