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

时间: 2024-08-02 11:18:19

GetClientRect的相关文章

GetWindowRect与GetClientRect 的区别[转]

GetWindowRect 函数功能:该函数返回指定窗口的边框矩形的尺寸.该尺寸以相对于屏幕坐标左上角的屏幕坐标给出. 函数原型:BOOL GetWindowRect(HWND hWnd,LPRECTlpRect): 在Visual Studio 2005中,函数原型为void GetWindowRect(LPRECT lpRect) const; 是属于CWnd类的函数. 参数: hWnd:窗口句柄. lpRect:指向一个RECT结构的指针,该结构接收窗口的左上角和右下角的屏幕坐标. 返回值

GetWindowRect和GetClientRect的区别详解

一:关于坐标 MFC中绘图时经常涉及到坐标计算,GetWindowRect和GetClientRect这两个函数,是获取逻辑坐标系中窗口或控件(其实也是窗口)大小和坐标的常用函数了,有什么不一样的? 先说说什么叫逻辑坐标?讲到逻辑坐标,它相对的一个概念是设备坐标,是为了屏蔽掉不同设备属性差别而设置的抽象坐标系,说白了,就是独立于设备坐标的统一接口,程序员不需要去在具体的设备上进行绘图操作,而只需要在虚拟的环境下进行绘图,就是CDC. 然后由设备驱动去负责虚拟坐标到实际设备坐标之间的转换.通常逻辑

GetClientRect()和GetWindowRect()

GetClientRect()   是得到客户区坐标系下客户区的RECT GetWindowRect()是得到屏幕坐标系下整个窗口的RECT GetSystemMetrics()是获得屏幕分辨率大小 根据不同参数: int width = GetSystemMetrics ( SM_CXSCREEN );  int height= GetSystemMetrics ( SM_CYSCREEN ); 分别获得屏幕的宽和高. int width = GetSystemMetrics ( SM_CXV

[00012]-[2015-08-27]-[00]-[Windows 程序设计 ---GetWindowDC GetWindowRect GetClientDC(GetDC) GetClientRect]

::GetWindowDC(m_hWnd); // 表示GetWindowDC()是一个全局函数,作用域大 GetWindowDC() 获得的设备环境覆盖了整个窗口(包括非客户区),例如标题栏.菜单.滚动条,以及边框 GetWindowRect() rect表示应用程序窗口在屏幕中的位置rigth left top bottom GetDC() 获取的是应用程序中客户区的环境设备 GetClientRect() rect表示应用程序客户区的rect. left right top bottom

GetWindowRect() GetClientRect() ScreenToClient() MoveWindow()

CWnd.GetWindowRect 参照坐标系:屏幕坐标系,原点为屏幕左上角(0,0)的位置 功能:取得调用窗口CWnd在屏幕坐标系下的RECT坐标 CWnd.GetClientRect 参照坐标系:CWnd窗口的客户区坐标系,原点为客户区左上角(0,0)的位置 功能:取得窗口在自己的客户区(不包括非客户区)坐标系下的RECT坐标,可以得到窗口的大小,而不能得到相对屏幕的位置 CWnd.ScreenToClient() 参照坐标系:CWnd窗口的客户区坐标系,原点为客户区左上角(0,0)的位置

VC:GetWindowRect、GetClientRect、ScreenToClient与ClientToScreen

GetWindowRect是取得窗口在屏幕坐标系下的RECT坐标(包括客户区和非客户区),这样可以得到窗口的大小和相对屏幕左上角(0,0)的位置. GetClientRect取得窗口客户区(不包括非客户区)在客户区坐标系下的RECT坐标,可以得到窗口的大小,而不能得到相对屏幕的位置,因为这个矩阵是在客户区坐标系下(相对于窗口客户区的左上角)的. 用GetClientRect返回的RECT结构上左为零, 右下分别对应客户区的宽度和高度; ScreenToClient把屏幕坐标系下的RECT坐标转换

GetWindowRect和GetClientRect比较学习

一:关于坐标 MFC中绘图时经常涉及到坐标计算,GetWindowRect和GetClientRect这两个函数,是获取逻辑坐标系中窗口或控件(其实也是窗口)大小和坐标的常用函数了,有什么不一样的? 先说说什么叫逻辑坐标?讲到逻辑坐标,它相对的一个概念是设备坐标,是为了屏蔽掉不同设备属性差别而设置的抽象坐标系,说白了,就是独立于设备坐标的统一接口,程序员不需要去在具体的设备上进行绘图操作,而只需要在虚拟的环境下进行绘图,就是CDC. 然后由设备驱动去负责虚拟坐标到实际设备坐标之间的转换.通常逻辑

VC自绘按钮

看了吕鑫老师的视频,自己试着编写了一个自绘按钮控件.YuButton.h头文件如下: #pragma once   #include "afxwin.h"   class CYuButton :public CWnd   {       private:           BOOL  m_bIsDown;           BOOL  m_bIsMove;           BOOL  _bMouseTrack;//鼠标追踪状态              CString  m_s

手动创建CView视图

通过VC2010向导创建一个标准的MFC单文档框架,去掉文档/视图结构支持.然后,在资源中插入一个FormView窗口,在MainFrame的Create中创建并显示此视图窗口. CView *pView = (CMainView *)(RUNTIME_CLASS(CMainView)->CreateObject());   if(!pView)   {       MessageBox(_T("创建视图不成功!"));       return 0;   }      CRec