涂鸦板
#include <windows.h> LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) { static int cxClient, cyClient, draw=0, started=0, LineWide=0, R=0, G=0, B=0; static HPEN hPen; static HDC hdc ; int i ; static PAINTSTRUCT ps ; switch(Message) { case WM_SIZE: { cxClient = LOWORD (lParam) ; cyClient = HIWORD (lParam) ; break; } case WM_LBUTTONDOWN: draw = 1; if (!started) { hdc = BeginPaint (hwnd, &ps) ; } started = 1; MoveToEx (hdc, LOWORD(lParam), HIWORD(lParam), NULL) ; break; case WM_LBUTTONUP: draw = 0; break; case WM_MOUSEMOVE: if (draw) { hPen = CreatePen(PS_SOLID, LineWide, RGB(R,G,B)); SelectObject(hdc, hPen); LineTo(hdc, LOWORD(lParam), HIWORD(lParam)) ; } break; case WM_KEYDOWN: switch(wParam){ case VK_UP: if (LineWide<20) LineWide++; break; case VK_DOWN: if (LineWide>0) LineWide--; break; case VK_LEFT: if (R<255) R++; if (G<255) G++; if (B<255) B++; break; case VK_RIGHT: if (R>0) R--; if (G>0) G--; if (B>0) B--; break; case 'R': case 'r': if (R<255) R++; else {if(G>0)G--;if(B>0)B--;}; break; case 'G': case 'g': if (G<255) G++; else {if(R>0)R--;if(B>0)B--;}; break; case 'B': case 'b': if (B<255) B++; else {if(R>0)R--;if(G>0)G--;}; break; } break; case WM_PAINT: { break; } case WM_CLOSE: { DestroyWindow(hwnd); break; } case WM_DESTROY: { PostQuitMessage(0); break; } default: return DefWindowProc(hwnd, Message, wParam, lParam); } return 0; } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASSEX wc; HWND hwnd; MSG Msg; memset(&wc,0,sizeof(wc)); wc.cbSize = sizeof(WNDCLASSEX); wc.lpfnWndProc = WndProc; /* This is where we will send messages to */ wc.hInstance = hInstance; wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wc.lpszClassName = "WindowClass"; wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); /* Load a standard icon */ wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); if(!RegisterClassEx(&wc)) { MessageBox(NULL, "Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK); return 0; } hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,"WindowClass","涂鸦板",WS_VISIBLE|WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, NULL, NULL, hInstance, NULL); if(hwnd == NULL) { MessageBox(NULL, "Window Creation Failed!","Error!",MB_ICONEXCLAMATION|MB_OK); return 0; } while(GetMessage(&Msg, NULL, 0, 0) > 0) { TranslateMessage(&Msg); DispatchMessage(&Msg); } return Msg.wParam; }