整理: DC相关

void CTestBmpSaveToDlg::OnButton1() { /** * 按照屏幕上显示的实际位图大小重新保存位图文件 */ CxImage CxImage_a; /** * CxImage_a 装入位图... * CxImage_a.Decode(...) */ HDC hDc = GetWindowDC(NULL); int XDPI = GetDeviceCaps(hDc, LOGPIXELSX); int YDPI = GetDeviceCaps(hDc, LOGPIXELSY); ReleaseDC(NULL, hDc); CxImage_a.SetXDPI(XDPI); CxImage_a.SetYDPI(YDPI); float fCx = 0; float fCy = 0; /** * 得到位图实际的毫米尺寸到 fCx, fCy ... * 其他地方来的信息, * 比如原图制作时是在屏幕上显示一张实际A5大小的毫米尺寸位图 */ /** * 得到位图毫米尺寸到位图对应与当前分辨率下的像素尺寸到 fWidth, fHeigth */ float fWidth = fCx / 25.4f * XDPI; float fHeigth = fCy / 25.4f * YDPI; /** * 按照当前位图的像素尺寸转换位图 */ CxImage_a.Resample(fWidth, fHeigth); PBYTE pcBmpTmp = NULL; long dwLenBmpTmp = 0; if(!CxImage_a.Encode(pcBmpTmp, dwLenBmpTmp, CXIMAGE_FORMAT_BMP)) { LsLogError("CxImage_a.Encode()错误, 无法传递位图数据"); } else { saveBinFile("x://按照屏幕显示的实际大小重新保存的位图.bmp", pcBmpTmp, dwLenBmpTmp); } }

 

验证:

1. 写个测试程序, 在屏幕上圈选一个区域, 把这个区域的毫米尺寸报出来.

2. 写个屏幕标尺, 用户随意在屏幕上标注两点, 报出这条线的毫米尺寸.

 

    要显示出标尺的外形. codeproject上有这种资料,先找一下.

 

 预期的实现:

   程序运行后为托盘,测量按钮在悬浮窗内.  悬浮窗半透明, 位图背景,位图按钮.

 

   卡尺的左右卡钳,分别为一个锥形图案.

   左卡钳的锥尖指向右下.

   右卡钳的锥尖指向左上.

  由两个锥尖之间的距离来界定要测量的距离.

 

  左右卡钳分别为非模态对话框,装入异型图案(锥形图案)。

 当鼠标移动上到卡钳的有效异型图案内时,鼠标变成拖动的小手。并有提示信息,请用户拖动卡钳.

 

 当测量时,在屏幕上画出要测量的直线的提示线,闪烁.

 在测量后,在测量按钮附件弹出提示框,显示测量结果.

<2011_0105>

一个Demo, 在Mdi切分窗口中画标尺, 随着鼠标的移动, 标尺线也在动.

http://www.codeproject.com/KB/splitter/ruler.aspx

Implementing Rulers inside of Splitter Panes - 2

 

<2011_0105>

/* * 填充CDC背景色 * RGB(127,127,127) 奶白色, * 适用于电子书正常页面的底色, 看着舒服 */ pDC->FillSolidRect(x, y, cx, cy, RGB(127,127,127));

 

你可能感兴趣的:(测试,null,float)