/* * * fontsize.cpp * * # フォントサイズをポイントで指定 * */ #include const char szClassName[] = "FontSize"; const UINT IDC_EDIT1 = 100; HMODULE hAppModule=NULL; LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { hAppModule=(HMODULE)hInstance; WNDCLASSEX wc; wc.cbClsExtra = 0; wc.cbSize = sizeof(WNDCLASSEX); wc.cbWndExtra = 0; wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wc.hCursor = ::LoadCursor(NULL,MAKEINTRESOURCE(IDC_ARROW)); wc.hIcon = NULL; wc.hIconSm = NULL; wc.hInstance = hInstance; wc.lpfnWndProc = (WNDPROC)WndProc; wc.lpszClassName = szClassName; wc.lpszMenuName = NULL; wc.style = CS_HREDRAW | CS_VREDRAW; ::RegisterClassEx(&wc); HWND hWnd=::CreateWindow(szClassName,szClassName, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,CW_USEDEFAULT,200,200, NULL,NULL,hInstance,0); if ( hWnd==NULL ) return 0; ::ShowWindow(hWnd,nCmdShow); MSG msg; while ( ::GetMessage(&msg,NULL,0,0) ) { ::TranslateMessage(&msg); ::DispatchMessage(&msg); } return 0; } LRESULT CALLBACK WndProc(HWND in_hWnd, UINT in_Message, WPARAM in_wParam, LPARAM in_lParam) { static HFONT hFont=NULL; switch ( in_Message ) { case WM_CREATE: RECT rect; ::GetClientRect(in_hWnd,&rect); HWND hEdit; hEdit=::CreateWindowEx(WS_EX_CLIENTEDGE,"EDIT","ABCDE 12345 +-*/", WS_CHILD | WS_VISIBLE | ES_READONLY, 0,0,rect.right-rect.left,rect.bottom-rect.top, in_hWnd,(HMENU)IDC_EDIT1,hAppModule,0); HDC hDC; hDC=::GetDC(in_hWnd); hFont=::CreateFont( ::MulDiv(9,-::GetDeviceCaps(hDC,LOGPIXELSY),72), 0,0,0,FW_NORMAL,0,0,0,SHIFTJIS_CHARSET, OUT_STROKE_PRECIS,CLIP_STROKE_PRECIS,DRAFT_QUALITY, VARIABLE_PITCH | FF_SWISS,"MS ゴシック"); ::SendMessage(hEdit,WM_SETFONT,(WPARAM)hFont,MAKELONG(TRUE,0)); ::ReleaseDC(in_hWnd,hDC); ::SetFocus(hEdit); break; case WM_SIZE: if ( in_wParam!=SIZE_MINIMIZED ) ::MoveWindow(::GetDlgItem(in_hWnd,IDC_EDIT1), 0,0,LOWORD(in_lParam),HIWORD(in_lParam),TRUE); break; case WM_DESTROY: ::DeleteObject(hFont); ::DestroyWindow(::GetDlgItem(in_hWnd,IDC_EDIT1)); ::PostQuitMessage(0); break; default: return ::DefWindowProc(in_hWnd, in_Message,in_wParam,in_lParam); } return 0; }