映射坐标后,GDI字符串输出函数统统需要重新计算坐标,有没有简单点的处理办法?解决办法
映射坐标后,GDI字符串输出函数统统需要重新计算坐标,有没有简单点的处理办法?
比如DrawText、TextOut这些函数:
DrawText(hDC, CurveTitle, -1, &CurveTitleRect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
上面的语句将CurveTitle显示在了CurveTitleRect矩形的水平中间,当我把坐标原点映射到屏幕右边时,上面的语句输出就再也不居中了。
映射坐标程序如下:
SetMapMode(HDC, MM_ANISOTROPIC);
SetWindowExtEx(HDC, WIDTH, HEIGHT, 0);
SetViewportExtEx(HDC, -WIDTH, HEIGHT, 0);
SetViewportOrgEx(HDC, WIDTH, 0, 0);
其中 WIDTH 和 HEIGHT 为窗口的宽和高。
------解决方案--------------------
DPtoLP
------解决方案--------------------
Avoid(千金散尽还复来),不要乱误导人,另外没试过,就别信口开河
GDI函数大都使用逻辑坐标,所以好像只要将其转化为逻辑坐标就可以,例:
GetClientRect (hwnd, &rect) ;
DPtoLP(hdc, (PPOINT)&rect,2);
DrawText(hDC, CurveTitle, -1, &CurveTitleRect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
但是我发现DrawText的旗标好像只有在逻辑坐标的x,y方向与视口坐标的方向相同才可以,不信你可以试试看,我也不知道为什么。
比如DrawText、TextOut这些函数:
DrawText(hDC, CurveTitle, -1, &CurveTitleRect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
上面的语句将CurveTitle显示在了CurveTitleRect矩形的水平中间,当我把坐标原点映射到屏幕右边时,上面的语句输出就再也不居中了。
映射坐标程序如下:
SetMapMode(HDC, MM_ANISOTROPIC);
SetWindowExtEx(HDC, WIDTH, HEIGHT, 0);
SetViewportExtEx(HDC, -WIDTH, HEIGHT, 0);
SetViewportOrgEx(HDC, WIDTH, 0, 0);
其中 WIDTH 和 HEIGHT 为窗口的宽和高。
------解决方案--------------------
DPtoLP
------解决方案--------------------
Avoid(千金散尽还复来),不要乱误导人,另外没试过,就别信口开河
GDI函数大都使用逻辑坐标,所以好像只要将其转化为逻辑坐标就可以,例:
GetClientRect (hwnd, &rect) ;
DPtoLP(hdc, (PPOINT)&rect,2);
DrawText(hDC, CurveTitle, -1, &CurveTitleRect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
但是我发现DrawText的旗标好像只有在逻辑坐标的x,y方向与视口坐标的方向相同才可以,不信你可以试试看,我也不知道为什么。