私はDrawIconExでアイコンを表示させたのですが、画質がとても悪すぎます。
C
1#include <windows.h> 2 3LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) { 4 HDC hdc; 5 PAINTSTRUCT ps; 6 static HICON hIcon; 7 switch(msg) { 8 case WM_DESTROY: 9 PostQuitMessage(0); 10 return 0; 11 case WM_CREATE: 12 hIcon = LoadIcon(((LPCREATESTRUCT)(lp))->hInstance,TEXT("icon1")); 13 return 0; 14 case WM_PAINT: 15 hdc = BeginPaint(hwnd,&ps); 16 DrawIconEx(hdc,10,10,hIcon,500,500,0,0,DI_NORMAL); 17 EndPaint(hwnd,&ps); 18 } 19 return DefWindowProc(hwnd , msg , wp , lp); 20} 21 22int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance , 23 PSTR lpCmdLine , int nCmdShow ) { 24 HWND hwnd; 25 HBRUSH hBrush = CreateSolidBrush(RGB(255,255,255)); 26 WNDCLASS winc; 27 MSG msg; 28 winc.style = CS_HREDRAW | CS_VREDRAW; 29 winc.lpfnWndProc = WndProc; 30 winc.cbClsExtra = winc.cbWndExtra = 0; 31 winc.hInstance = hInstance; 32 winc.hIcon = LoadIcon(hInstance,TEXT("icon1")); 33 winc.hCursor = LoadCursor(NULL , IDC_ARROW); 34 winc.hbrBackground = hBrush; 35 winc.lpszMenuName = NULL; 36 winc.lpszClassName = TEXT("test"); 37 38 if (!RegisterClass(&winc)) return 0; 39 40 hwnd = CreateWindow( 41 TEXT("test") , TEXT("icon") , 42 WS_OVERLAPPEDWINDOW | WS_VISIBLE , 43 CW_USEDEFAULT , CW_USEDEFAULT , 44 CW_USEDEFAULT , CW_USEDEFAULT , 45 NULL , NULL , 46 hInstance , NULL 47 ); 48 49 if (hwnd == NULL) return 0; 50 51 while (GetMessage(&msg , NULL , 0 , 0)) DispatchMessage(&msg); 52 return msg.wParam; 53}
なにか解決策がないか教えてほしいです。
環境は、MinGW-win32でコンパイル方法は、gcc -mwindows test.c test.oです。
試したこと
BITMAPを使おうと思いましたが、なぜか画像が表示されません。
リソーススクリプト
image.rc
1icon1 BITMAP "R.bmp"
C
1#include <windows.h> 2 3LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) { 4 HDC hdc , hBuffer; 5 PAINTSTRUCT ps; 6 static HBITMAP hBitmap; 7 8 switch (msg) { 9 case WM_DESTROY: 10 DeleteObject(hBitmap); 11 PostQuitMessage(0); 12 return 0; 13 case WM_CREATE: 14 hBitmap = LoadBitmap( 15 ((LPCREATESTRUCT)lp)->hInstance , 16 TEXT("icon1") 17 ); 18 return 0; 19 case WM_PAINT: 20 hdc = BeginPaint(hwnd , &ps); 21 hBuffer = CreateCompatibleDC(hdc); 22 SelectObject(hBuffer , hBitmap); 23 24 BitBlt(hdc , 0 , 0 , 500 , 500 , hBuffer , 500 , 500 , SRCCOPY); 25 26 DeleteDC(hBuffer); 27 EndPaint(hwnd , &ps); 28 return 0; 29 } 30 return DefWindowProc(hwnd , msg , wp , lp); 31} 32 33int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance , 34 PSTR lpCmdLine , int nCmdShow ) { 35 HWND hwnd; 36 MSG msg; 37 WNDCLASS winc; 38 39 winc.style = CS_HREDRAW | CS_VREDRAW; 40 winc.lpfnWndProc = WndProc; 41 winc.cbClsExtra = winc.cbWndExtra = 0; 42 winc.hInstance = hInstance; 43 winc.hIcon = LoadIcon(NULL , IDI_APPLICATION); 44 winc.hCursor = LoadCursor(NULL , IDC_ARROW); 45 winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); 46 winc.lpszMenuName = NULL; 47 winc.lpszClassName = TEXT("test"); 48 49 if (!RegisterClass(&winc)) return -1; 50 51 hwnd = CreateWindow( 52 TEXT("test") , TEXT("icon") , 53 WS_OVERLAPPEDWINDOW | WS_VISIBLE , 54 CW_USEDEFAULT , CW_USEDEFAULT , 55 CW_USEDEFAULT , CW_USEDEFAULT , 56 NULL , NULL , 57 hInstance , NULL 58 ); 59 60 if (hwnd == NULL) return -1; 61 62 while(GetMessage(&msg , NULL , 0 , 0)) { 63 TranslateMessage(&msg); 64 DispatchMessage(&msg); 65 } 66 return msg.wParam; 67}
そして、DrawIconExを使わずDrawIconを使い、あとでStretchBltで拡大しようとしましたが、
画質が悪いまま。
ほかにも方法がないか調べましたが、なにもありません。
> 私はDrawTextExでアイコンを表示させたのですが、画質がとても悪すぎます。
DrawIconExでは?
画質が悪いだけだと、他の人にはどういう状態かさっぱり判らないので、実際に設定したアイコンの画像と表示される画像のスクリーンショットでも貼り付けてください。
[質問するときのヒント] https://teratail.com/help/question-tips
回答2件
あなたの回答
tips
プレビュー