15,979
社区成员
发帖
与我相关
我的任务
分享
// vcwin32.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
#include "vcwin32.h"
//---------------------------------------------------------------------------
#include <windows.h>
#include <winuser.h>
#include <commctrl.h>
#include <tchar.h>
#include <assert.h>
HINSTANCE ghInstance;// Global Instance
// Prototyp WindowFunction
LRESULT CALLBACK WndProcedure (HWND hwnd, UINT msg,WPARAM w, LPARAM l);
//****************************************************************************************
HWND mainWin;
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPTSTR /*lpCmdLine*/, int nCmdShow)
{
//InitCommonControls();
static TCHAR szAppName[]= __TEXT("Test_WmPaint");
static TCHAR szTitleBar[]= __TEXT("Title Bar");
WNDCLASSEX wndclass;
MSG msg;
// Register Class
ghInstance = hInstance;
wndclass.cbSize = sizeof(WNDCLASSEX);
wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS ;
wndclass.lpfnWndProc = WndProcedure;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = NULL;//LoadIcon (ghInstance, IDI_APPLICATION);
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW);
//wndclass.hbrBackground = Null;
//wndclass.hbrBackground = CreateSolidBrush(RGB(200,0,0));
wndclass.hbrBackground = (HBRUSH)(COLOR_GRAYTEXT+1);//GetStockObject (WHITE_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName;
wndclass.hIconSm = NULL;//LoadIcon(NULL, IDI_APPLICATION);
if (!RegisterClassEx (&wndclass)) {
MessageBox(NULL, __TEXT("Window Registration Failed!"), __TEXT("Error!"), MB_ICONEXCLAMATION | MB_OK);
return -1;
}
// Create Window and show Window
mainWin = CreateWindow (szAppName,
szTitleBar,
WS_OVERLAPPEDWINDOW, //WS_POPUP, //!WS_CAPTION ,
200, // x position for this window
200, // y position for this window
300, // window width
300, // window height
NULL, // parent
NULL, // menu
hInstance,
NULL); // user data
if (mainWin == NULL) {
MessageBox(NULL, __TEXT("Window Creation Failed!"), __TEXT("Error!"),MB_ICONEXCLAMATION | MB_OK);
return 0;
}
ShowWindow (mainWin, nCmdShow);
UpdateWindow (mainWin);
// Dispatch Message or exit program
while (GetMessage (&msg, NULL, 0, 0)) {
//if(!IsDialogMessage(hwnd, &msg)){
TranslateMessage (&msg);
DispatchMessage (&msg);
//}
}
return (msg.wParam);
}
//**************************************************************************
HBRUSH brushes[] = {
CreateSolidBrush(RGB(100,0,0)),
CreateSolidBrush(RGB(0,160,0)),
CreateSolidBrush(RGB(0,0,255)),
};
LRESULT CALLBACK WndProcedure (HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam)
{
static int x=0;
assert(hWnd!=NULL);
int ret=0;
HDC hdc=NULL;
//HPEN pen=NULL;
PAINTSTRUCT ps;
RECT rt;
SetRect(&rt,0,0,0,0); // init
switch (wMsg) {
case WM_CREATE:
break;
case WM_LBUTTONDOWN:
return 0;
/*
hdc = GetDC(hWnd);
GetClientRect(hWnd, &rt);
FillRect(hdc, &rt, brushes[0]);
ReleaseDC(hWnd, hdc);
break;
*/
case WM_PAINT:{
x++;
hdc = BeginPaint(hWnd, &ps);
rt = ps.rcPaint;
SetRect(&rt, 0,0,2000,2000);
//use this line can easy see which region is painted.
ret=FillRect(hdc, &rt/*&ps.rcPaint*/, brushes[x%2]);
//ret=FillRect(hdc, &ps.rcPaint, brushes[0]);
if(ret==0) {
MessageBox(mainWin, __TEXT("fill rect Error "), __TEXT("Error"), MB_OK);
}
//RedrawWindow(hWnd, &ps.rcPaint, NULL, RDW_NOERASE);
EndPaint(hWnd, &ps);
//GdiFlush ();
return 0;
}
case WM_ERASEBKGND:
hdc = (HDC)wParam;
rt.left = 0 ; rt.top = 0;
rt.right = 300; rt.bottom = 300;
ret=FillRect(hdc, &rt, brushes[2] );
return 1;
case WM_DESTROY:
PostQuitMessage (0);
return (0);
}
return DefWindowProc (hWnd, wMsg, wParam, lParam);
}
case WM_ERASEBKGND:
hdc = (HDC)wParam;
GetClientRect(hWnd, &rt);
//rt.left = 0 ; rt.top = 0;
//rt.right = 300; rt.bottom = 300;
ret=FillRect(hdc, &rt, brushes[2] );
return 1;