
WIN32APIで画像を表示させるプログラムを組んでみようと思ったのですが、以下のプログラムを実行すると、ビルドは成功しますが、ウィンドウがそもそも開きません。(そう見えているだけかもしれないです。)
ユニコード文字セット使用で、画像のパスはあっていました。
↓こちらのページを参考にしています。
http://eternalwindows.jp/ole/oledraw/oledraw03.h …
まだまだ初心者ですので、ここはこう書いたほうが簡潔で分かりやすい、という部分も多々あるかと思いますが、とりあえず質問した問題の原因と解決を急ぎたいです。よろしくお願いいたします。
*以下コード*
#include <windows.h>
#include <olectl.h>
#define WIDTH 1000
#define HEIGHT 700
#define MSG(m) MessageBoxW(NULL, m, NULL, MB_OK)
HWND hwnd;
HINSTANCE hinst;
HDC hMain;
void HIMETRICtoDP(LPSIZEL lpSizel);
LRESULT CALLBACK WndProcHome(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
PAINTSTRUCT ps;
HDC hdc = NULL;
OLE_XSIZE_HIMETRIC cxSrc;
OLE_YSIZE_HIMETRIC cySrc;
SIZEL sizel;
OLE_HANDLE hOle;
short Type;
HRESULT hr;
static IPicture *iPicture = NULL;
char filename[] = "ここに画像のパスが入る。";
switch (message) {
case WM_CREATE:
hdc = GetDC(hwnd);
hMain = CreateCompatibleDC(NULL);
OleInitialize(NULL);
hr = OleLoadPicturePath((WCHAR*)filename, NULL, 0, 0, IID_PPV_ARGS(&iPicture));
if (FAILED(hr)) return -1;
return 0;
case WM_PAINT:
hdc = GetDC(hwnd);
hdc = BeginPaint(hwnd, &ps);
iPicture->get_Width(&cxSrc);
iPicture->get_Height(&cySrc);
HIMETRICtoDP(&sizel);
iPicture->Render(hdc, 0, 0, sizel.cx, sizel.cy, 0, cySrc, cxSrc, -cySrc, NULL);
EndPaint(hwnd, &ps);
return 0;
case WM_DESTROY:
ReleaseDC(hwnd, hdc);
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) {
MSG msg;
WNDCLASS wc;
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProcHome;
wc.cbClsExtra = wc.cbWndExtra = NULL;
wc.hInstance = hInstance;
wc.hCursor = wc.hIcon = NULL;
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszClassName = L"WndClass";
wc.lpszMenuName = NULL;
if (!RegisterClass(&wc)) {
MSG(L"Registing Window Class failed......");
return -1;
}
hwnd = CreateWindowW(L"WndClass", L"Test Program", WS_VISIBLE | WS_SYSMENU | WS_CAPTION | WS_MINIMIZEBOX | WS_MAXIMIZEBOX, 10, 10, WIDTH, HEIGHT, NULL, NULL, hinst, NULL);
if (NULL == hwnd) {
MSG(L"Creating Window failed ......");
return -1;
}
hinst = hInstance;
int check;
while ((check = GetMessage(&msg, NULL, 0, 0)) != 0) {
if (check == -1) {
break;
}
TranslateMessage(&msg);
DispatchMessage(&msg);
}
UnregisterClass(L"WndClass", hinst);
return 0;
}
void HIMETRICtoDP(LPSIZEL lpSizel) {
HDC hdc;
const int HIMETRICINCH = 2540;
hdc = GetDC(NULL);
lpSizel->cx = lpSizel->cx * GetDeviceCaps(hdc, LOGPIXELSX) / HIMETRICINCH;
lpSizel->cy = lpSizel->cy * GetDeviceCaps(hdc, LOGPIXELSY) / HIMETRICINCH;
ReleaseDC(NULL, hdc);
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- FX・外国為替取引 mql4のコンパイルエラー箇所の修正お願いします。 1 2023/03/15 16:14
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- C言語・C++・C# leetcode 155 minstack 1 2022/05/07 16:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ダイアログプログラムでEnterキ...
-
WM_CREATE について
-
C言語win32api、エディットボッ...
-
ウィンドウ非表示に時に表示し...
-
WM_INITDIALOGのフック
-
DirectShowを用いたmpgファイル...
-
エラー Run-Time Check Failur...
-
VC++2005での警告について教え...
-
エディットコントロール入力時...
-
アイコンを左上に表示したい
-
エディットボックスの背景の色...
-
Win32のファイルダイアログのサ...
-
Win32APIでウィンドウを中央に...
-
「指定されたキャストは有効で...
-
Excelで1つしかない値だけを抽...
-
Aの値からBの値を除するとは??
-
信頼区間の1.96や1.65ってどこ...
-
関数とビット列
-
テキストデータをそのままバイ...
-
C言語の型による処理速度の違い
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エディットボックスの背景の色...
-
ウィンドウ非表示に時に表示し...
-
エラー Run-Time Check Failur...
-
Win32APIにて、ウィンドウ全体...
-
ボタンの色(WINAPI)
-
ダイアログプログラムでEnterキ...
-
C#のswitch文を簡略化したいの...
-
オーバーレイみたいな処理がしたい
-
Win32APIでウィンドウを中央に...
-
プログラミングでエラーが出ま...
-
ツリーコントロールの開閉アイ...
-
なぜhButton1ボタンからのWM_CO...
-
C言語win32api、エディットボッ...
-
LoadImageとSetCursorについて
-
コンソールアプリケーションの...
-
画像を表示したいのですが……
-
MoveToExとLineToについて
-
ウィンドウのサイズ変更について
-
ボタンのアイコン表示
-
トラックのループの仕方
おすすめ情報