zoukankan      html  css  js  c++  java
  • 绘图基础

    #include <Windows.h>
    #include <stdio.h>
    //#include "resource.h"
    //#include <afxwin.h>
    #include <math.h>
    
    #define TWO_PI (2.0*3.1415926)
    LRESULT CALLBACK MyWindowProc(
    							  HWND hwnd, 
    							  UINT uMsg, 
    							  WPARAM wParam, 
    							  LPARAM lParam 
    							  ); 
    void DrawRectangle(HWND hwnd);
    int cxClient,cyClient;
    int WINAPI WinMain(  HINSTANCE hInstance,  HINSTANCE hPrevInstance, LPSTR lpCmdLine,  int nShowCmd )
    {
    	HWND hwnd;
    	WNDCLASS wndclass;
    	MSG msg;
    	static TCHAR MyAppName[]=TEXT("My first windows app");
    	wndclass.style=CS_HREDRAW|CS_VREDRAW;
    	wndclass.lpfnWndProc=MyWindowProc;
    	wndclass.cbClsExtra=0;//预留的额外空间
    	wndclass.cbWndExtra=0;
    	wndclass.hInstance=hInstance;
    	wndclass.hIcon=::LoadIcon(NULL,IDI_INFORMATION);
    	wndclass.hCursor=::LoadCursor(NULL,IDC_ARROW);//::LoadCursor(hInstance,MAKEINTRESOURCE(IDC_CURSOR1));
    	wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
    	wndclass.lpszMenuName=NULL;
    	wndclass.lpszClassName=TEXT("My first windows app");
    	if (!RegisterClass(&wndclass))
    	{
    		int i=GetLastError();
    		//char str[25]={0};
    		wchar_t chResult[128]={0};
    		_itow(i,chResult,10);
    		//sprintf(str,TEXT("%d"),i);
    		//sprintf(buffer,L"Key State = 0X%X  ",key_state);
    		MessageBox(NULL,chResult,TEXT("Error"),MB_OK);
    		//AfxMessageBox(TEXT("Error") );
    	}
    	hwnd=CreateWindow( MyAppName,
    		TEXT("My first windows"),
    		WS_OVERLAPPEDWINDOW|WS_VSCROLL|WS_HSCROLL,
    		CW_USEDEFAULT ,
    		CW_USEDEFAULT,
    		CW_USEDEFAULT,
    		CW_USEDEFAULT,
    		NULL,NULL,
    		hInstance,
    		NULL
    		);
    	ShowWindow(hwnd,SW_SHOWNORMAL); 
    	//ShowWindow(hwnd,iCmdShow);
    	UpdateWindow(hwnd);
    	while(TRUE)
    	{
    		if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
    		{
    			if(msg.message==WM_QUIT)
    				break;
    			TranslateMessage(&msg);
    			DispatchMessage(&msg);
    		}
    		else
    			DrawRectangle(hwnd);
    	}
    	
    	return msg.wParam;
    }
    LRESULT CALLBACK MyWindowProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
    {
    	static HRGN hRgnClip;
    	//static int cxClient,cyClient;
    	double fAngle,fRadius;
    	HCURSOR hCursor;
    	HDC hdc;
    	HRGN hRgnTem[6];
    	int i;
    	PAINTSTRUCT ps;
    	switch(uMsg)
    	{
    	case WM_SIZE:
    		cxClient=LOWORD(lParam);
    		cyClient=HIWORD(lParam);
    
    		hCursor=SetCursor(LoadCursor(NULL,IDC_WAIT));
    		ShowCursor(TRUE);
    
    		if (hRgnClip)
    		{
    			DeleteObject(hRgnClip);
    		}
    		hRgnTem[0]=CreateEllipticRgn(0,cyClient/3,cxClient/2,2*cyClient/3);//创建椭圆区域
    		hRgnTem[1]=CreateEllipticRgn(cxClient/2,cyClient/3,cxClient,2*cyClient/3);
    		hRgnTem[2]=CreateEllipticRgn(cxClient/3,0,2*cxClient/3,cyClient/2);
    		hRgnTem[3]=CreateEllipticRgn(cxClient/3,cyClient/2,2*cxClient/3,cyClient);
    		hRgnTem[4]=CreateRectRgn(0,0,1,1);//初始化一个矩形区域
    		hRgnTem[5]=CreateRectRgn(0,0,1,1);
    		hRgnClip=CreateRectRgn(0,0,1,1);
    
    		CombineRgn(hRgnTem[4],hRgnTem[0],hRgnTem[1],RGN_XOR);//合并并赋给hRgnTem[4]
    		CombineRgn(hRgnTem[5],hRgnTem[2],hRgnTem[3],RGN_XOR);
    		CombineRgn(hRgnClip,hRgnTem[4],hRgnTem[5],RGN_XOR);
    		for (i=0;i<6;i++)
    		{
    			DeleteObject(hRgnTem[i]);
    		}
    		SetCursor(hCursor);
    		ShowCursor(FALSE);
    		return 0;
    	case WM_PAINT:
    		hdc=BeginPaint(hwnd,&ps);
    		SetViewportOrgEx(hdc,cxClient/2,cyClient/2,NULL);//将视点坐标移至客户区中心位置
    		SelectClipRgn(hdc,hRgnClip);//将区域选入DC
    
    		fRadius=_hypot(cxClient/2.0,cyClient/2.0);
    		for (fAngle=0.0;fAngle<TWO_PI;fAngle+=TWO_PI/360)
    		{
    			MoveToEx(hdc,0,0,NULL);
    			LineTo(hdc,(int)(fRadius*cos(fAngle)+0.5),(int)(-fRadius*sin(fAngle)+0.5));
    		}
    		EndPaint(hwnd,&ps);
    		return 0;
    	case WM_DESTROY:
    		DeleteObject(hRgnClip);
    		PostQuitMessage(0);
    		return 0;
    	}
    	return DefWindowProc(hwnd,uMsg,wParam,lParam);
    }
    void DrawRectangle(HWND hwnd)
    {
    	RECT rect;
    	HBRUSH hBrush;
    	if (cxClient==0||cyClient==0)
    	{
    		return;
    	}
    	SetRect(&rect,rand()%cxClient,rand()%cyClient,rand()%cxClient,rand()%cyClient);
    	hBrush=CreateSolidBrush(RGB(rand()%256,rand()%256,rand()%256));
    	HDC hdc=GetDC(hwnd);
    	FillRect(hdc,&rect,hBrush);
    	ReleaseDC(hwnd,hdc);
    	DeleteObject(hBrush);
    }
    

      

  • 相关阅读:
    python 获取当前路径
    python 执行结果输出为txt
    python def 定义函数
    python:浅析python 中__name__ = ‘__main__’ 的作用
    python 数组新增或删除元素
    python在Windows安装PIL的方法
    静态路由学习总结
    zookeeper客户端命令行操作
    kudu安装过程中可能出现的问题
    sudo: /etc/sudoers is world writable|给用户添加权限报错
  • 原文地址:https://www.cnblogs.com/xzlq/p/3116084.html
Copyright © 2011-2022 走看看