GetClientRect

这个函数好像就是对应于视口的,获取视口的宽高

#include <windows.h>

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
 PSTR szCmdLine, int iCmdShow)
{
	static TCHAR szAppName[] = TEXT ("坐标") ;
    HWND hwnd ;
    MSG msg ;
    WNDCLASS wndclass ;
    wndclass.style = CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc= WndProc ;
    wndclass.cbClsExtra = 0 ;
    wndclass.cbWndExtra = 0 ;
    wndclass.hInstance = hInstance ;
    wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
    wndclass.hCursor= LoadCursor (NULL, IDC_ARROW) ;
    wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
    wndclass.lpszMenuName = NULL ;
    wndclass.lpszClassName = szAppName ;
    if (!RegisterClass (&wndclass))
	{
        MessageBox (NULL, TEXT ("This program requires Windows NT!"),
        szAppName, MB_ICONERROR) ;
        return 0 ;
	}
    hwnd = CreateWindow (szAppName, TEXT ("坐标尺寸"),
                         WS_OVERLAPPEDWINDOW,
                         CW_USEDEFAULT, CW_USEDEFAULT,
                         CW_USEDEFAULT, CW_USEDEFAULT,
                         NULL, NULL, hInstance, NULL) ;
    ShowWindow (hwnd, iCmdShow) ;
    UpdateWindow (hwnd) ;
    while (GetMessage (&msg, NULL, 0, 0))
	{
        TranslateMessage (&msg) ;
        DispatchMessage (&msg) ;
	}
    return msg.wParam ;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	HDC hdc ;
    PAINTSTRUCT ps ;
	RECT rect;
	switch (message)
	{
     case WM_PAINT:
		 hdc = BeginPaint (hwnd, &ps) ;
		HPEN hPen,hOldPen;
		 hPen=CreatePen(PS_SOLID,1,RGB(0,12,255));
		 hOldPen=(HPEN)SelectObject(hdc,hPen);
//1	     Ellipse(hdc,-100, -100, 100, 100);

		 GetClientRect(hwnd,&rect);
     //    MoveToEx(hdc,rect.right/2,0,NULL);
	//	 LineTo(hdc,rect.right/2,rect.bottom);
//		 MoveToEx(hdc,rect.left,rect.bottom/2,NULL);
//		 LineTo(hdc,rect.right,rect.bottom/2);

//2		 Ellipse(hdc,-50,-50,50,50);
//		 MoveToEx(hdc,0,0,NULL);
//		 LineTo(hdc,100,100);

//3		 SetViewportOrgEx(hdc,200,150,NULL);
//		 Ellipse(hdc,-50,-50,50,50);
//		 MoveToEx(hdc,0,0,NULL);
//		 LineTo(hdc,100,100);

//3.1 SetViewportOrgEx(hdc,rect.right/2,rect.bottom/2,NULL);
//		 Ellipse(hdc,-50,-50,50,50);
//		 MoveToEx(hdc,0,0,NULL);
//		 LineTo(hdc,100,100);

//3.2		SetViewportOrgEx(hdc,rect.right/2,rect.bottom/2,NULL);
//		Ellipse(hdc,-100,-100,100,100);
//		MoveToEx(hdc,rect.left,0,NULL);
//		LineTo(hdc,rect.right,0);
	//	MoveToEx(hdc,0,rect.top,NULL);
	//	LineTo(hdc,0,rect.bottom);

//4		 SetMapMode(hdc,MM_ANISOTROPIC);
//		SetViewportOrgEx(hdc,380,220,NULL);
//		Ellipse(hdc,-100,-100,100,100);
//		MoveToEx(hdc,-380,0,NULL);
//		LineTo(hdc,380,0);
//		MoveToEx(hdc,0,-220,NULL);
//		LineTo(hdc,0,220);

//		MoveToEx(hdc,0,0,NULL);
//		LineTo(hdc,120,120);

		 LOGBRUSH logbrush;
		 HBRUSH hBrush,hOldBrush;
		 logbrush.lbStyle=BS_SOLID;
		 logbrush.lbColor=RGB(128,128,128);
		 logbrush.lbHatch=HS_HORIZONTAL;
		 hBrush=CreateBrushIndirect(&logbrush);
		 hOldBrush=(HBRUSH)SelectObject(hdc,hBrush);
		 Rectangle(hdc,-100,-100,100,100);
		 MoveToEx(hdc,0,0,NULL);
		 LineTo(hdc,200,200);

		 DeleteObject(hPen);
		 DeleteObject(hBrush);
		 SelectObject(hdc,hOldPen);
		 SelectObject(hdc,hOldBrush);
        EndPaint (hwnd, &ps) ;
        break;
     case WM_DESTROY:
        PostQuitMessage (0) ;
        return 0 ;
	}
     return DefWindowProc (hwnd, message, wParam, lParam) ;
}

 文章相关链接  http://www.ucancode.net/faq/Coordinate-SetViewportOrg-SetWindowExt-SetViewportExt-SetMapMode.htm

重剑无锋,大巧不工
原文地址:https://www.cnblogs.com/919czzl/p/4076432.html