回复 14楼 hellovfp
我现在能够加载窗口背景了 你提示下如果我不用CreateThread()能不能消除闪烁

梅尚程荀
马谭杨奚
void yrjd_OnTimer(HWND hWnd, UINT nIDEvent) { RECT rect = {510, 200, 810, 400}; choice = (choice + 1) % 6; InvalidateRect(hWnd, &rect, TRUE); }
void yrjd_OnTimer(HWND hWnd, UINT nIDEvent) { srand(time(NULL)); RECT rect = {510, 200, 810, 400}; choice = rand() % 6; InvalidateRect(hWnd, &rect, TRUE); }发现在.cpp文件头加很多头文件不太好看 我为了随机显示又添加了两个头文件
/////////////////////////////////////// // Program Name: Stdafx.h // Programmer: yrjd // Description: Set head files together ////////////////////////////////////////// #define STRICT #define WIN32_LEAN_AND_MEAN #include <Windows.h> #include <Windowsx.h> #include <time.h> #include <stdlib.h> #include <math.h> #include <stdio.h> #pragma warning(disable: 4068) #pragma warning (disable:4100) // Please think about these two sentences #pragma hdrstop
/////////////////////////////////////// // Program Name: Template.cpp // Programmer: yrjd // Description: *****Add code here***** ////////////////////////////////////////// #include "Stdafx.h" #include "Template.h" // Global variables static char szAppName[] = "An Template"; static HINSTANCE hInstance; static HWND hWnd; static int cxClient, cyClient; //********************* // Initialization //********************* //--------------------------- // WinMain is the entry point //--------------------------- #pragma argsused int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow ) { MSG msg; if (!hPrevInstance) // In fact this sentence may be omitted if (! Register(hInst)) // Registered Window Class { return FALSE; } if (!Create(hInst, nCmdShow)) // Create a window instance { return FALSE; } while (GetMessage(&msg, NULL, 0, 0)) // Message circulation { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } //////////////////////////////////// // Register the window //////////////////////////////////// #pragma argsused BOOL Register(HINSTANCE hInst) { WNDCLASS wndclass; wndclass.style = CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = WndProc; wndclass.hInstance = hInst; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = szAppName; // Notice this 'szAppName' return (RegisterClass(&wndclass)); // The function here is very important } //////////////////////////////////// // Create the Window and show it. //////////////////////////////////// #pragma argsused BOOL Create(HINSTANCE hInst, int nCmdShow) { hInstance = hInst; // Connect with the global instance HWND hWnd = CreateWindowEx(0, szAppName, szAppName, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInst, NULL); if (hWnd == NULL) { return FALSE; } ShowWindow(hWnd, nCmdShow); //... UpdateWindow(hWnd); //... return TRUE; } //********************* // Implementation //********************* //-------------------------------- // The Window proc help control // the program when it is running //-------------------------------- LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { HANDLE_MSG(hWnd, WM_CREATE, yrjd_OnCreate); HANDLE_MSG(hWnd, WM_SIZE, yrjd_OnSize); HANDLE_MSG(hWnd, WM_DESTROY, yrjd_OnDestroy); HANDLE_MSG(hWnd, WM_CLOSE, yrjd_OnClose); HANDLE_MSG(hWnd, WM_PAINT, yrjd_OnPaint); HANDLE_MSG(hWnd, WM_TIMER, yrjd_OnTimer); default: return DefWindowProc(hWnd, message, wParam, lParam); } } // Create Window #pragma argsused BOOL yrjd_OnCreate(HWND hWnd, CREATESTRUCT FAR *lpCreateStruct) { return TRUE; } // Specify the size void yrjd_OnSize(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { cxClient = LOWORD(lParam); cyClient = HIWORD(lParam); } // Handle WM_DESTROY void yrjd_OnDestroy(HWND hWnd) { PostQuitMessage(0); } // Handle WM_CLOSE void yrjd_OnClose(HWND hWnd) { if (IDYES == MessageBox(hWnd, "Do you want to exit?", "choice", MB_YESNO)) { DestroyWindow(hWnd); } } // Handle WM_PAINT void yrjd_OnPaint(HWND hWnd) { PAINTSTRUCT ps; HDC hdc; hdc = BeginPaint(hWnd, &ps); // To add code here..... EndPaint(hWnd, &ps); } // Handle WM_TIMER void yrjd_OnTimer(HWND hWnd, UINT nIDEvent) { ; }_____________
//////////////////////////////////////////////// // Program Name: Template.h // Programmer: yrjd // Description: Head file for Template.cpp //////////////////////////////////////////////// // Variables // Add code here..... // Some procs BOOL Register(HINSTANCE hInst); BOOL Create(HINSTANCE hInst, int nCmdShow); LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); // The yrjd Class BOOL yrjd_OnCreate(HWND hWnd, CREATESTRUCT FAR *lpCreateStruct); void yrjd_OnSize(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); void yrjd_OnDestroy(HWND hWnd); void yrjd_OnPaint(HWND hWnd); void yrjd_OnTimer(HWND hWnd, UINT nIDEvent); void yrjd_OnClose(HWND hWnd);
HWND hWnd; HDC hdcBuf; HBITMAP hbmpBuf; RECT rect = {0, 0, 200, 200} HDC hdcMain = GetDC(hWnd); hdcBuf = CreateCompatibleDC(hdcMain); hbmpBuf = CreateCompatibleBitmap(hdcMain, 200, 200); SelectObject(hdcBuf, hbmpBuf); FillRect(hdcBuf, &rect, (HBRUSH)GetStockObject(WHITE_BRUSH)); ReleaseDC(hWnd, hdcMain);先创建一个窗口 hWnd 然后在这个窗口下衍生一个兼容设备hdcBuf 发现这时候如果想获取