zoukankan      html  css  js  c++  java
  • Win32 CreateWindow GdiPlus

    #include "stdafx.h"
    #include "TestGidPlus.h"
    
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    
    int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
    {
    	GdiplusStartupInput gdiplusStartupInput;
    	ULONG_PTR           gdiplusToken;
    	// Initialize GDI+.
    	GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
    
    	WNDCLASSEX wcApp;
    	wcApp.lpszClassName			= TEXT("Test_Window");
    	wcApp.cbSize				= sizeof(wcApp);
    	wcApp.style					= CS_HREDRAW | CS_VREDRAW;
    	wcApp.hInstance				= hInstance;
    	wcApp.cbWndExtra			= 0;	
    	wcApp.cbClsExtra			= 0;
    	wcApp.hCursor				= LoadCursor(NULL,IDC_ARROW);
    	wcApp.hIcon					= LoadIcon(NULL,IDI_APPLICATION);
    	wcApp.lpfnWndProc			= WndProc;
    	wcApp.hCursor				= LoadCursor(NULL,IDC_ARROW);
    	wcApp.hbrBackground			= (HBRUSH)(COLOR_WINDOW);
    	wcApp.lpszMenuName			= NULL;
    	wcApp.hIconSm				= NULL;
    	RegisterClassExW(&wcApp);
    
    	HWND hwnd = CreateWindowExW (NULL, TEXT("Test_Window"), TEXT(""), WS_OVERLAPPEDWINDOW, 100, 100, 600, 400, NULL, NULL, hInstance, NULL);
    	ShowWindow(hwnd,SW_NORMAL);
    	UpdateWindow(hwnd);
    	MSG msg;
    	while (GetMessage(&msg, NULL, 0, 0)) 
    	{
    		TranslateMessage(&msg);
    		DispatchMessage(&msg);
    	}
    	GdiplusShutdown(gdiplusToken);
    	return msg.lParam;
    }
    
    LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	LRESULT b;
    	PAINTSTRUCT ps;
    	HDC hdc;
    	switch (message)
    	{
    	case WM_CREATE:
    		//SendMessage(hwnd,WM_PAINT,0,0);
    		break;
    	case WM_PAINT:
    		{
    			///////////////////Gdiplus与Gdi混合实现双缓冲////////////////////
    			//HDC hMemDC = CreateCompatibleDC(m_hDC);
    			//HBITMAP hMemBitmap = CreateCompatibleBitmap(m_hDC, DEFAULT_STATUS_WIDTH, DEFAULT_STATUS_HEIGHT);
    			//SelectObject(hMemDC, hMemBitmap);
    			//Graphics *memGraphics = new Graphics(hMemDC);
    			//Pen pen(Color(192, 192, 192));
    			//SolidBrush brush(Color(255, 255, 255));
    			//memGraphics->FillRectangle(&brush, xPos, yPos, DEFAULT_STATUS_WIDTH, DEFAULT_STATUS_HEIGHT);
    			//memGraphics->DrawRectangle(&pen, xPos, yPos, DEFAULT_STATUS_WIDTH, DEFAULT_STATUS_HEIGHT);
    			//for (int i = 0; i < SMALL_IMAGE_COUNT; i++)
    			//{
    			//	DrawImageFromId(memGraphics, imgID[i], imgXPos[i], imgYPos[i]);
    			//}
    			//DeleteObject(hMemBitmap);
    			//BitBlt(m_hDC, xPos, yPos, DEFAULT_STATUS_WIDTH, DEFAULT_STATUS_HEIGHT, hMemDC, 0, 0, SRCCOPY);
    			//DeleteDC(hMemDC);
    			//delete memGraphics;
    
    			hdc = BeginPaint(hwnd, &ps);
    			Graphics graphics(hdc);
    			Pen pen(Color(255, 0, 0));
    			graphics.DrawLine(&pen, 0, 0, 0, 500);
    			EndPaint(hwnd, &ps);
    			break;
    		}
    	case WM_NCHITTEST:
    		{
    			POINT pt; 
    			pt.x = GET_X_LPARAM(lParam); 
    			pt.y = GET_Y_LPARAM(lParam);
    
    			RECT rcClient;
    			GetClientRect(hwnd, &rcClient);
    
    			b = DefWindowProc(hwnd,message,wParam,lParam);
    			switch(b)
    			{
    			case HTCLIENT:
    				SetWindowText(hwnd,TEXT("点击的是客户区"));
    				return b;
    			case HTCAPTION:
    				SetWindowText(hwnd,TEXT("点击的是标题栏"));
    				return b;
    			case HTBOTTOM:
    				SetWindowText(hwnd,TEXT("点击的是下边框"));
    				return b;
    			case HTBOTTOMLEFT:
    				SetWindowText(hwnd,TEXT("点击的是左下边框"));
    				return b;
    				return b;
    			case HTCLOSE:
    				SetWindowText(hwnd,TEXT("点击的是关闭按钮"));
    				return b;
    			case HTLEFT:
    				SetWindowText(hwnd,TEXT("点击的是左边框"));
    				return b;
    			case HTMAXBUTTON:
    				SetWindowText(hwnd,TEXT("点击的是最大化按钮"));
    				return b;
    			case HTMINBUTTON:
    				SetWindowText(hwnd,TEXT("点击的是最小化按钮"));
    				return b;
    			case HTRIGHT:
    				SetWindowText(hwnd,TEXT("点击的是右边框"));
    				return b;
    			case HTSYSMENU:
    				SetWindowText(hwnd,TEXT("点击的是系统菜单"));
    				return b;
    			case HTTOP:
    				SetWindowText(hwnd,TEXT("点击的是上边框"));
    				return b;
    			case HTBOTTOMRIGHT:
    				SetWindowText(hwnd,TEXT("点击的是右下边框"));
    				return b;
    			case HTTOPRIGHT:
    				SetWindowText(hwnd,TEXT("点击的是右上边框"));
    				return b;
    			case HTTOPLEFT:
    				SetWindowText(hwnd,TEXT("点击的是左上边框"));
    				return b;
    			default:
    				return b;
    			}
    		}
    	case WM_DESTROY:
    		PostQuitMessage (0) ;
    		return 0 ;
    	}
    	return DefWindowProc (hwnd, message, wParam, lParam) ;
    }
    

      

  • 相关阅读:
    剑指 Offer 41. 数据流中的中位数
    剑指 Offer 19. 正则表达式匹配
    leetcode 75 颜色分类
    Deepin 添加 open as root
    window 下 无损进行其他文件系统(ext4) 到 ntfs 文件系统的转化
    Windows Teminal Preview Settings
    CentOS 7 容器内替换 apt-get 源为阿里源
    Ubuntu 20.04 安装 Consul
    elementary os 15 添加Open folder as root
    elementary os 15 gitbook install
  • 原文地址:https://www.cnblogs.com/d3inc/p/3799701.html
Copyright © 2011-2022 走看看