C
1#include <windows.h> 2 3LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) { 4 HDC hdc; 5 PAINTSTRUCT ps; 6 7 static HICON hIcon; 8 switch(msg) { 9 case WM_DESTROY: 10 PostQuitMessage(0); 11 return 0; 12 case WM_CREATE: 13 hIcon = LoadImage(((LPCREATESTRUCT)(lp))->hInstance,TEXT("icon"),IMAGE_ICON,0,0,LR_DEFAULTCOLOR); 14 return 0; 15 case WM_PAINT: 16 hdc = BeginPaint(hwnd,&ps); 17 DrawIconEx(hdc,0,0,hIcon,0,0,0,NULL,DI_NORMAL); 18 EndPaint(hwnd,&ps); 19 } 20 return DefWindowProc(hwnd , msg , wp , lp); 21} 22 23int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance , 24 PSTR lpCmdLine , int nCmdShow ) { 25 HWND hwnd; 26 HBRUSH hBrush = CreateSolidBrush(RGB(255,255,255)); 27 WNDCLASS winc; 28 HICON hIcon = LoadImage(hInstance,TEXT("icon"),IMAGE_ICON,0,0,LR_DEFAULTCOLOR); 29 MSG msg; 30 winc.style = CS_HREDRAW | CS_VREDRAW; 31 winc.lpfnWndProc = WndProc; 32 winc.cbClsExtra = winc.cbWndExtra = 0; 33 winc.hInstance = hInstance; 34 winc.hIcon = hIcon; 35 winc.hCursor = LoadCursor(NULL , IDC_ARROW); 36 winc.hbrBackground = hBrush; 37 winc.lpszMenuName = NULL; 38 winc.lpszClassName = TEXT("test"); 39 40 if (!RegisterClass(&winc)) return 0; 41 42 hwnd = CreateWindow( 43 TEXT("test") , TEXT("icon") , 44 WS_OVERLAPPEDWINDOW | WS_VISIBLE , 45 CW_USEDEFAULT , CW_USEDEFAULT , 46 CW_USEDEFAULT , CW_USEDEFAULT , 47 NULL , NULL , 48 hInstance , NULL 49 ); 50 51 if (hwnd == NULL) return 0; 52 53 while (GetMessage(&msg , NULL , 0 , 0)) DispatchMessage(&msg); 54 return msg.wParam; 55} 56
試したこと
アイコンのサイズを32x32で画質を最大限あげてみましたが、少し良くなっただけで画質はまだ悪い。
LoadIconでやっても効果なし。
LoadImageのLR_DEFAULTCOLORをLR_DEFAULTSIZEにかえても効果なし。
私がいれてるゲームのアイコンを使ってみるも効果なし(ゲームのアイコンはとてもいいです。)
なにか方法があるなら教えてください。
追記
いろいろ調べた結果、
ウィンドウを高DPI化することで、多分ウィンドウのアイコンを高画質化することがわかりました。
http://yamatyuu.net/computer/program/sdk/win/messagebox/index.html
こちらからダウンロードしたのが、こちら↓
高DPI化してないメッセージボックスは↓
これでできると思いましたが、MinGW-Win64だとエラーが出て、コンパイラできません。
それで、ソースコードに
C
1#include <shellscalingapi.h>
があることに気づきました。
これを調べた結果DPIを取得などをできるようですが、MinGW-Win64ではインクルードできないようです。
どうすれば、高DPI化できるのでしょうか?
MinGW-Win64ではなく、他のを使うべきでしょうか?
回答2件
あなたの回答
tips
プレビュー