日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MFC 随机矩形

發布時間:2025/3/17 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MFC 随机矩形 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

問題描述:

  簡單地使用隨即的尺寸和顏色不停的繪制一系列的圖像。

一種古老的方式:

  設置一個向窗口函數發送WM_TIMER消息的windows計時器。

  對每個WM_TIMER消息,調用GetDC函數獲取設備環境,然后繪制一個隨機矩形,接著調用ReleaseDC函數釋放設備環境。

方法弊端:

  程序不能很快的繪制隨機矩形,必須等待每個WM_TIMER消息,會依賴于系統時鐘的精度

新函數:

  PeekMessage(&msg,NULL,0,0,PM_REMOVE);這個函數允許一個程序檢查程序隊列中的下一個消息,而不是真實的獲取并刪除它看到的消息。

正常的循環消息:

while (GetMessage(&msg, NULL, 0, 0)){if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)){TranslateMessage(&msg);DispatchMessage(&msg);}}

替換后的循環消息:

while(TRUE){if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)){if(msg.message == WM_QUIT)break;TranslateMessage(&msg);DispatchMessage(&msg);}elseDrawRctangle(hWnd);}

在這里,必須明確檢查WM_QUIT消息。在一個正常的消息循環中,不需要這樣做。

  因為正常的GetMessage返回值是false(0),但是PeekMessage的返回值是隊列中有沒有消息,因此檢查wm_quit是必要的。

源文件代碼:

// peekmessage.cpp : 定義應用程序的入口點。 // #include "stdafx.h" #include "peekmessage.h" #include <Windows.h> #include <stdlib.h>LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); void DrawRctangle(HWND);int cxClient,cyClient;int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow) {// TODO: 在此放置代碼。 HWND hWnd;static TCHAR szAppName[] = TEXT("RandRect");MSG msg;WNDCLASS wcex;wcex.style = CS_HREDRAW | CS_VREDRAW;wcex.lpfnWndProc = WndProc;wcex.cbClsExtra = 0;wcex.cbWndExtra = 0;wcex.hInstance = hInstance;wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_PEEKMESSAGE));wcex.hCursor = LoadCursor(NULL, IDC_ARROW);wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);wcex.lpszMenuName = NULL;wcex.lpszClassName = szAppName;if (!RegisterClass(&wcex)){MessageBox(NULL,TEXT("this program requires Windows ",szAppName,MB_ICONERROR);return 0;}hWnd = CreateWindow(szAppName,TEXT("Random Rectangles"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);ShowWindow(hWnd,nCmdShow);UpdateWindow(hWnd);while(TRUE){if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)){if(msg.message == WM_QUIT)break;TranslateMessage(&msg);DispatchMessage(&msg);}elseDrawRctangle(hWnd);}return (int) msg.wParam; }void DrawRctangle(HWND hWnd) {HBRUSH hBrush;HDC hdc;RECT rect;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 = GetDC(hWnd);FillRect(hdc,&rect,hBrush);ReleaseDC(hWnd,hdc);DeleteObject(hBrush); }LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {switch(message){case WM_SIZE:cxClient = LOWORD(lParam);cyClient = HIWORD(wParam);return 0;case WM_DESTROY:PostQuitMessage(0);return 0;}return DefWindowProc(hWnd,message,wParam,lParam); }

轉載于:https://my.oschina.net/u/204616/blog/544985

總結

以上是生活随笔為你收集整理的MFC 随机矩形的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。