質問編集履歴
1
画像とコードの誤りを直したことと試したことを書きました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
私は
|
1
|
+
私はDrawIconExでアイコンを表示させたのですが、画質がとても悪すぎます。
|
2
2
|
```C
|
3
3
|
#include <windows.h>
|
4
4
|
|
@@ -24,7 +24,7 @@
|
|
24
24
|
int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
|
25
25
|
PSTR lpCmdLine , int nCmdShow ) {
|
26
26
|
HWND hwnd;
|
27
|
-
HBRUSH hBrush = CreateSolidBrush(RGB(
|
27
|
+
HBRUSH hBrush = CreateSolidBrush(RGB(255,255,255));
|
28
28
|
WNDCLASS winc;
|
29
29
|
MSG msg;
|
30
30
|
winc.style = CS_HREDRAW | CS_VREDRAW;
|
@@ -57,4 +57,92 @@
|
|
57
57
|
|
58
58
|
なにか解決策がないか教えてほしいです。
|
59
59
|
|
60
|
-
環境は、MinGW-win32でコンパイル方法は、gcc -mwindows test.c test.oです。
|
60
|
+
環境は、MinGW-win32でコンパイル方法は、gcc -mwindows test.c test.oです。
|
61
|
+
|
62
|
+
表示させたい画像
|
63
|
+

|
64
|
+
|
65
|
+
でも実行すると、
|
66
|
+

|
67
|
+
こうなります。
|
68
|
+
|
69
|
+
試したこと
|
70
|
+
BITMAPを使おうと思いましたが、なぜか画像が表示されません。
|
71
|
+
|
72
|
+
リソーススクリプト
|
73
|
+
```image.rc
|
74
|
+
icon1 BITMAP "R.bmp"
|
75
|
+
```
|
76
|
+
```C
|
77
|
+
#include <windows.h>
|
78
|
+
|
79
|
+
LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) {
|
80
|
+
HDC hdc , hBuffer;
|
81
|
+
PAINTSTRUCT ps;
|
82
|
+
static HBITMAP hBitmap;
|
83
|
+
|
84
|
+
switch (msg) {
|
85
|
+
case WM_DESTROY:
|
86
|
+
DeleteObject(hBitmap);
|
87
|
+
PostQuitMessage(0);
|
88
|
+
return 0;
|
89
|
+
case WM_CREATE:
|
90
|
+
hBitmap = LoadBitmap(
|
91
|
+
((LPCREATESTRUCT)lp)->hInstance ,
|
92
|
+
TEXT("icon1")
|
93
|
+
);
|
94
|
+
return 0;
|
95
|
+
case WM_PAINT:
|
96
|
+
hdc = BeginPaint(hwnd , &ps);
|
97
|
+
hBuffer = CreateCompatibleDC(hdc);
|
98
|
+
SelectObject(hBuffer , hBitmap);
|
99
|
+
|
100
|
+
BitBlt(hdc , 0 , 0 , 500 , 500 , hBuffer , 500 , 500 , SRCCOPY);
|
101
|
+
|
102
|
+
DeleteDC(hBuffer);
|
103
|
+
EndPaint(hwnd , &ps);
|
104
|
+
return 0;
|
105
|
+
}
|
106
|
+
return DefWindowProc(hwnd , msg , wp , lp);
|
107
|
+
}
|
108
|
+
|
109
|
+
int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
|
110
|
+
PSTR lpCmdLine , int nCmdShow ) {
|
111
|
+
HWND hwnd;
|
112
|
+
MSG msg;
|
113
|
+
WNDCLASS winc;
|
114
|
+
|
115
|
+
winc.style = CS_HREDRAW | CS_VREDRAW;
|
116
|
+
winc.lpfnWndProc = WndProc;
|
117
|
+
winc.cbClsExtra = winc.cbWndExtra = 0;
|
118
|
+
winc.hInstance = hInstance;
|
119
|
+
winc.hIcon = LoadIcon(NULL , IDI_APPLICATION);
|
120
|
+
winc.hCursor = LoadCursor(NULL , IDC_ARROW);
|
121
|
+
winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
|
122
|
+
winc.lpszMenuName = NULL;
|
123
|
+
winc.lpszClassName = TEXT("test");
|
124
|
+
|
125
|
+
if (!RegisterClass(&winc)) return -1;
|
126
|
+
|
127
|
+
hwnd = CreateWindow(
|
128
|
+
TEXT("test") , TEXT("icon") ,
|
129
|
+
WS_OVERLAPPEDWINDOW | WS_VISIBLE ,
|
130
|
+
CW_USEDEFAULT , CW_USEDEFAULT ,
|
131
|
+
CW_USEDEFAULT , CW_USEDEFAULT ,
|
132
|
+
NULL , NULL ,
|
133
|
+
hInstance , NULL
|
134
|
+
);
|
135
|
+
|
136
|
+
if (hwnd == NULL) return -1;
|
137
|
+
|
138
|
+
while(GetMessage(&msg , NULL , 0 , 0)) {
|
139
|
+
TranslateMessage(&msg);
|
140
|
+
DispatchMessage(&msg);
|
141
|
+
}
|
142
|
+
return msg.wParam;
|
143
|
+
}
|
144
|
+
```
|
145
|
+
そして、DrawIconExを使わずDrawIconを使い、あとでStretchBltで拡大しようとしましたが、
|
146
|
+
画質が悪いまま。
|
147
|
+
|
148
|
+
ほかにも方法がないか調べましたが、なにもありません。
|