/* デバイスコンテキストのマッピングモード   2000/ 8/ 7 宍戸 輝光 */ #include LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); HWND hwMain; DWORD dwMM=MM_TEXT; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { MSG msg; WNDCLASSEX wndclass ; HMENU hMenu,hMenuA; wndclass.cbSize = sizeof(wndclass); wndclass.style = CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = WndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = hInstance; wndclass.hIcon = NULL; wndclass.hCursor = LoadCursor(NULL,IDC_ARROW); wndclass.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = "CWindow"; wndclass.hIconSm = NULL; RegisterClassEx (&wndclass); hwMain=CreateWindow ("CWindow",NULL,WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,CW_USEDEFAULT,500,568,NULL,NULL,hInstance,NULL); // メニュー作成 hMenu=CreateMenu(); hMenuA=CreateMenu(); AppendMenu(hMenuA,MF_STRING,1,"MM_TEXT"); AppendMenu(hMenuA,MF_STRING,2,"MM_LOMETRIC"); AppendMenu(hMenuA,MF_STRING,3,"MM_HIMETRIC"); AppendMenu(hMenuA,MF_STRING,4,"MM_LOENGLISH"); AppendMenu(hMenuA,MF_STRING,5,"MM_HIENGLISH"); AppendMenu(hMenuA,MF_STRING,6,"MM_TWIPS"); AppendMenu(hMenu,MF_POPUP,(UINT)hMenuA,"マッピングモード"); SetMenu(hwMain,hMenu); ShowWindow (hwMain,iCmdShow); /* ウインドウを表示 */ UpdateWindow (hwMain); while (GetMessage (&msg,NULL,0,0)) { /* メッセージループ */ TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam ; } LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; switch (iMsg) { case WM_COMMAND: /* マッピングモード変更メニュー */ switch (LOWORD(wParam)) { case 1: dwMM=MM_TEXT; break; case 2: dwMM=MM_LOMETRIC; break; case 3: dwMM=MM_HIMETRIC; break; case 4: dwMM=MM_LOENGLISH; break; case 5: dwMM=MM_HIENGLISH; break; case 6: dwMM=MM_TWIPS; break; } InvalidateRgn(hwnd,NULL,TRUE); UpdateWindow (hwnd); return 0; case WM_PAINT: hdc=BeginPaint(hwnd,&ps); SelectObject(hdc,GetStockObject(BLACK_PEN)); SelectObject(hdc,GetStockObject(WHITE_BRUSH)); SetMapMode(hdc,dwMM); SetViewportOrgEx(hdc,0,256,NULL); Rectangle(hdc,0,0,255,255); MoveToEx(hdc,0,0,NULL); LineTo(hdc,128,255); LineTo(hdc,255,0); return 0; case WM_DESTROY : /* 終了処理 */ PostQuitMessage(0); return 0; } return DefWindowProc (hwnd, iMsg, wParam, lParam) ; }