#include <windows.h> #define TITLE TEXT("Kitty on your lap") BITMAPINFO bmpInfo; BYTE * bPixelBits; LRESULT CALLBACK WndProc(HWND hWnd , UINT msg , WPARAM wp , LPARAM lp) { HDC hdc; PAINTSTRUCT ps; HRGN hRgn; RECT rect; switch (msg) { case WM_DESTROY: PostQuitMessage(0); return 0; case WM_PAINT: hdc = BeginPaint(hWnd , &ps); GetClientRect(hWnd , &rect); hRgn = CreateEllipticRgn(0 , 0 , rect.right , rect.bottom); SelectClipRgn(hdc , hRgn); SetDIBitsToDevice( hdc , 0 , 0 , bmpInfo.bmiHeader.biWidth , bmpInfo.bmiHeader.biHeight , 0 , 0 , 0 , bmpInfo.bmiHeader.biHeight , bPixelBits , &bmpInfo , DIB_RGB_COLORS ); SelectClipRgn(hdc , NULL); DeleteObject(hRgn); EndPaint(hWnd , &ps); return 0; } return DefWindowProc(hWnd , msg , wp , lp); } int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance , PSTR lpCmdLine , int nCmdShow) { HWND hWnd; MSG msg; WNDCLASS winc; HANDLE hFile; DWORD dwBytes; BITMAPFILEHEADER bmpFileHeader; hFile = CreateFile(lpCmdLine , GENERIC_READ , 0 , NULL , OPEN_EXISTING , FILE_ATTRIBUTE_NORMAL , NULL); if (hFile == INVALID_HANDLE_VALUE) return 1; ReadFile(hFile , &bmpFileHeader , sizeof (BITMAPFILEHEADER) , &dwBytes , NULL); if (bmpFileHeader.bfType != 0x4D42) { MessageBox(NULL , TEXT("This is not a bitmap file") , NULL , MB_OK); return 1; } ReadFile(hFile , &bmpInfo , sizeof (BITMAPINFOHEADER) , &dwBytes , NULL); bPixelBits = (BYTE *) malloc (bmpFileHeader.bfSize - bmpFileHeader.bfOffBits); ReadFile(hFile ,bPixelBits , bmpFileHeader.bfSize - bmpFileHeader.bfOffBits , &dwBytes , NULL); CloseHandle(hFile); winc.style = CS_HREDRAW | CS_VREDRAW; winc.lpfnWndProc = WndProc; winc.cbClsExtra = winc.cbWndExtra = 0; winc.hInstance = hInstance; winc.hIcon = LoadIcon(NULL , IDI_APPLICATION); winc.hCursor = LoadCursor(NULL , IDC_ARROW); winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); winc.lpszMenuName = NULL; winc.lpszClassName = TEXT("KITTY"); if (!RegisterClass(&winc)) return 1; hWnd = CreateWindow( TEXT("KITTY") , TITLE , WS_OVERLAPPEDWINDOW ^ WS_THICKFRAME | WS_VISIBLE , CW_USEDEFAULT , CW_USEDEFAULT , bmpInfo.bmiHeader.biWidth , bmpInfo.bmiHeader.biHeight + GetSystemMetrics(SM_CYCAPTION) , NULL , NULL , hInstance , NULL ); if (hWnd == NULL) return 1; while (GetMessage(&msg , NULL , 0 , 0 )) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; }
#include <windows.h> #define TITLE TEXT("Kitty on your lap") LRESULT CALLBACK WndProc(HWND hWnd , UINT msg , WPARAM wp , LPARAM lp) { HDC hdc; PAINTSTRUCT ps; HRGN hRgn1 , hRgn2; RECT rect; switch (msg) { case WM_DESTROY: PostQuitMessage(0); return 0; case WM_PAINT: hdc = BeginPaint(hWnd , &ps); hRgn1 = CreateEllipticRgn(10 , 10 , 100 , 100); hRgn2 = CreateEllipticRgn(50 , 50 , 200 , 150); CombineRgn(hRgn1 , hRgn1 , hRgn2 , RGN_OR); SelectClipRgn(hdc , hRgn1); GetClipBox(hdc , &rect); GetClipRgn(hdc , hRgn2); SelectClipRgn(hdc , NULL); DeleteObject(hRgn1); Rectangle(hdc , rect.left , rect.top , rect.right , rect.bottom); FillRgn(hdc , hRgn2 , GetStockObject(BLACK_BRUSH)); DeleteObject(hRgn2); EndPaint(hWnd , &ps); return 0; } return DefWindowProc(hWnd , msg , wp , lp); } int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance , PSTR lpCmdLine , int nCmdShow) { HWND hWnd; MSG msg; WNDCLASS winc; winc.style = CS_HREDRAW | CS_VREDRAW; winc.lpfnWndProc = WndProc; winc.cbClsExtra = winc.cbWndExtra = 0; winc.hInstance = hInstance; winc.hIcon = LoadIcon(NULL , IDI_APPLICATION); winc.hCursor = LoadCursor(NULL , IDC_ARROW); winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); winc.lpszMenuName = NULL; winc.lpszClassName = TEXT("KITTY"); if (!RegisterClass(&winc)) return 1; hWnd = CreateWindow( TEXT("KITTY") , TITLE , WS_OVERLAPPEDWINDOW | WS_VISIBLE , CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT , NULL , NULL , hInstance , NULL ); if (hWnd == NULL) return 1; while (GetMessage(&msg , NULL , 0 , 0 )) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; }
定数 | 解説 |
---|---|
NULLREGION | クリッピング領域は空です |
SIMPLEREGION | クリッピング領域は単一の長方形です |
COMPLEXREGION | クリッピング領域は単一の長方形よりも複雑な形です |
ERROR | エラーが発生しました (以前のクリッピング領域に影響はありません) |
定数 | 解説 |
---|---|
RGN_AND | 現在のクリッピング領域と、hrgn パラメータで指定した リージョンの両方に含まれる領域 (重複する領域) を 新しいクリッピング領域にします |
RGN_COPY | hrgn パラメータで指定した リージョンのコピーを、新しいクリッピング領域にします この動作は、SelectClipRgn 関数と同じです hrgn パラメータが NULL のときは デフォルトの領域が新しいクリッピング領域になります |
RGN_DIFF | 現在のクリッピング領域から、hrgn パラメータで指定した リージョンを除いた領域を 新しいクリッピング領域にします |
RGN_OR | 現在のクリッピング領域と、hrgn パラメータで指定した リージョンを組み合わせた領域を 新しいクリッピング領域にします |
RGN_XOR | 現在のクリッピング領域と、hrgn パラメータで指定した リージョンを組み合わせた領域から その 2 つのリージョンの両方に含まれるリージョンを除いた領域を 新しいクリッピング領域にします |
定数 | 解説 |
---|---|
NULLREGION | クリッピング領域は空です |
SIMPLEREGION | クリッピング領域は単一の長方形です |
COMPLEXREGION | クリッピング領域は単一の長方形よりも複雑な形です |
ERROR | エラーが発生しました (以前のクリッピング領域に影響はありません) |
定数 | 解説 |
---|---|
NULLREGION | クリッピング領域は空です |
SIMPLEREGION | クリッピング領域は単一の長方形です |
COMPLEXREGION | クリッピング領域は単一の長方形よりも複雑な形です |
ERROR | エラーが発生しました (以前のクリッピング領域に影響はありません) |