#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;
TEXTMETRIC tm;
switch (msg) {
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_PAINT:
hdc = BeginPaint(hWnd , &ps);
GetTextMetrics(hdc , &tm);
TextOut(hdc , 100 , tm.tmHeight , TITLE , lstrlen(TITLE));
SetMapMode(hdc , MM_LOMETRIC);
TextOut(hdc , 100 , 0 , TITLE , lstrlen(TITLE));
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;
}

#include <windows.h>
#define TITLE TEXT("Kitty on your lap")
#define MES TEXT("論理座標 X = %dmm , Y = %dmm\n物理座標 X = %dpx , Y = %dpx")
LRESULT CALLBACK WndProc(HWND hWnd , UINT msg , WPARAM wp , LPARAM lp) {
HDC hdc;
PAINTSTRUCT ps;
POINT poLP , poDP;
RECT rect;
TCHAR str[1024];
switch (msg) {
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_NCHITTEST:
InvalidateRect(hWnd , NULL , TRUE);
break;
case WM_PAINT:
hdc = BeginPaint(hWnd , &ps);
GetCursorPos(&poDP);
poLP = poDP;
GetClientRect(hWnd , &rect);
SetMapMode(hdc , MM_LOMETRIC);
DPtoLP(hdc , &poLP , 1);
SetMapMode(hdc , MM_TEXT);
wsprintf(str , MES , poLP.x / 10 , poLP.y / 10 , poDP.x , poDP.y);
DrawText(hdc , str , -1 , &rect , DT_LEFT);
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;
}

#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;
switch (msg) {
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_PAINT:
hdc = BeginPaint(hWnd , &ps);
SetViewportOrgEx(hdc , 100 , 50 , NULL);
TextOut(hdc , 0 , 0 , TITLE , lstrlen(TITLE));
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;
}

| 定数 | 解説 |
|---|---|
| MM_ANISOTROPIC | 論理単位は、任意にスケーリングされた軸上の任意の単位にマップされます 単位、向き、スケーリングを指定するには SetWindowExtEx() と SetViewportExtEx() を使います |
| MM_HIENGLISH | 各論理単位は、0.001 インチにマップされます x の値は右に、y の値は上に向かって増加します |
| MM_HIMETRIC | 各論理単位は、0.01 ミリメートルにマップされます x の値は右に、y の値は上に向かって増加します |
| MM_ISOTROPIC | 論理単位は、等しくスケーリングされた軸上の任意の単位にマップされます すなわち、X 軸方向の 1 単位は、Y 軸方向の 1 単位と同じになります 単位と向きを指定するには、SetWindowExtEx() と SetViewportExtEx () を使います GDI は、必要に応じて x 単位と y 単位のサイズが同一になるように調整を行います |
| MM_LOENGLISH | 各論理単位は、0.01 インチにマップされます x の値は右に、y の値は上に向かって増加します |
| MM_LOMETRIC | 各論理単位は、0.1 ミリにマップされます x の値は右に、y の値は上に向かって増加します |
| MM_TEXT | 各論理単位は、1 デバイスピクセルにマップされます x の値は右に、y の値は下に向かって増加します |
| MM_TWIPS | 各論理単位は、ポイント数の 20 分の 1 にマップされます (1/1440 インチ、“twip”とも呼ばれます) x の値は右に、y の値は上に向かって増加します |