今WinAPIを使用してbitmapを表示しようとしています。
自分でリソーススクリプトを書いてコマンドプロンプトでリンクするとうまくいきます。
ですが面倒になったのでvisualstudio community2015を使用したいのですが
コンパイルは通りウィンドウ表示までは行くのですが
ウィンドウに表示されるはずの画像が表示されません。
公式のリファレンスを見てもよくわからないので
やり方を教えてほしいのです。
リソースは別のディレクトリの物をインポートして
リソースシンボルに表示されたIDとLoadBitmap(),BitBlt()
を使用して表示しようとしています。
リソースの追加以外はリソース関係の設定はいじっていません。
visualstudioのリソースファイルについて
Re: visualstudioのリソースファイルについて
http://dixq.net/board/board.htmlフォーラムルールを一度お読み下さい。
ルールのテンプレートです。(皆さんこういう感じに書かれています)
[1] 質問文
[1.1] 自分が今行いたい事は何か
[1.2] どのように取り組んだか(プログラムコードがある場合記載)
[1.3] どのようなエラーやトラブルで困っているか(エラーメッセージが解る場合は記載)
[1.4] 今何がわからないのか、知りたいのか
[2] 環境
[2.1] OS : Windows, Linux等々
[2.2] コンパイラ名 : VC++ 2008EE, Borand C++, gcc等々
[3] その他
・どの程度C言語を理解しているか
・ライブラリを使っている場合は何を使っているか
------------------------------------------------------------------------------------
コードは[album] ボタンの上のコードボタンをおしてcode...../code(カッコ付き)で囲んでください。
ルールのテンプレートです。(皆さんこういう感じに書かれています)
[1] 質問文
[1.1] 自分が今行いたい事は何か
[1.2] どのように取り組んだか(プログラムコードがある場合記載)
[1.3] どのようなエラーやトラブルで困っているか(エラーメッセージが解る場合は記載)
[1.4] 今何がわからないのか、知りたいのか
[2] 環境
[2.1] OS : Windows, Linux等々
[2.2] コンパイラ名 : VC++ 2008EE, Borand C++, gcc等々
[3] その他
・どの程度C言語を理解しているか
・ライブラリを使っている場合は何を使っているか
------------------------------------------------------------------------------------
コードは[album] ボタンの上のコードボタンをおしてcode...../code(カッコ付き)で囲んでください。
Re: visualstudioのリソースファイルについて
1.1 winapiを使ってbitmapを表示したい。
1.2 まずコマンドプロンプトでbitmapを表示するプログラムを作成した。
次にコマンドを打つのが面倒なのでvisualstudioを使っておなじことをやろうとした。
ソースは下記の通りです。
//コマンドプロンプト版
resource.rc main.cpp
//visualstudio版
.rcはリソースの追加、.bmpはインポートを使った。
設定は特にいじってない。
上記のコードは
http://wisdom.sakura.ne.jp/system/winap ... in104.html
のコードをそのまま使いました。
1.3 画像が表示されずウィンドウだけになる。
1.4 visualstudioのリソースの使い方が分からない。公式のリファレンス
https://msdn.microsoft.com/ja-jp/library/7zxb70x7.aspx
を読んでもわからなかったので
より簡単な説明が知りたい。
2.1 OS:windows10
2.2 VC++ 2015community
1.2 まずコマンドプロンプトでbitmapを表示するプログラムを作成した。
次にコマンドを打つのが面倒なのでvisualstudioを使っておなじことをやろうとした。
ソースは下記の通りです。
//コマンドプロンプト版
resource.rc main.cpp
#include <windows.h>
LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) {
HDC hdc , hBuffer;
PAINTSTRUCT ps;
static HBITMAP hBitmap;
switch (msg) {
case WM_DESTROY:
DeleteObject(hBitmap);
PostQuitMessage(0);
return 0;
case WM_CREATE:
hBitmap = LoadBitmap(
((LPCREATESTRUCT)lp)->hInstance ,
TEXT("KITTY")
);
return 0;
case WM_PAINT:
hdc = BeginPaint(hwnd , &ps);
hBuffer = CreateCompatibleDC(hdc);
SelectObject(hBuffer , hBitmap);
BitBlt(hdc , 0 , 0 , 400 , 120 , hBuffer , 70 , 80 , SRCCOPY);
DeleteDC(hBuffer);
EndPaint(hwnd , &ps);
return 0;
}
return DefWindowProc(hwnd , msg , wp , lp);
}
int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
PSTR lpCmdLine , int nCmdShow ) {
HWND hwnd;
MSG msg;
WNDCLASS winc;
winc.style = CS_HREDRAW | CS_VREDRAW;
winc.lpfnWndProc = WndProc;
winc.cbClsExtra = winc.cbWndExtra = 0;
winc.hInstance = hInstance;
winc.hIcon = LoadIcon(NULL , IDI_APPLICATION);
winc.hCursor = LoadCursor(NULL , IDC_ARROW);
winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
winc.lpszMenuName = NULL;
winc.lpszClassName = TEXT("KITTY");
if (!RegisterClass(&winc)) return -1;
hwnd = CreateWindow(
TEXT("KITTY") , TEXT("Kitty on your lap") ,
WS_OVERLAPPEDWINDOW | WS_VISIBLE ,
CW_USEDEFAULT , CW_USEDEFAULT ,
CW_USEDEFAULT , CW_USEDEFAULT ,
NULL , NULL ,
hInstance , NULL
);
if (hwnd == NULL) return -1;
while(GetMessage(&msg , NULL , 0 , 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
#include <windows.h>
LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) {
HDC hdc , hBuffer;
PAINTSTRUCT ps;
static HBITMAP hBitmap;
switch (msg) {
case WM_DESTROY:
DeleteObject(hBitmap);
PostQuitMessage(0);
return 0;
case WM_CREATE:
hBitmap = LoadBitmap(
((LPCREATESTRUCT)lp)->hInstance ,
TEXT("リソースビューでリソースシンボルを見たときに表示されたもの")
);
return 0;
case WM_PAINT:
hdc = BeginPaint(hwnd , &ps);
hBuffer = CreateCompatibleDC(hdc);
SelectObject(hBuffer , hBitmap);
BitBlt(hdc , 0 , 0 , 400 , 120 , hBuffer , 70 , 80 , SRCCOPY);
DeleteDC(hBuffer);
EndPaint(hwnd , &ps);
return 0;
}
return DefWindowProc(hwnd , msg , wp , lp);
}
int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
PSTR lpCmdLine , int nCmdShow ) {
HWND hwnd;
MSG msg;
WNDCLASS winc;
winc.style = CS_HREDRAW | CS_VREDRAW;
winc.lpfnWndProc = WndProc;
winc.cbClsExtra = winc.cbWndExtra = 0;
winc.hInstance = hInstance;
winc.hIcon = LoadIcon(NULL , IDI_APPLICATION);
winc.hCursor = LoadCursor(NULL , IDC_ARROW);
winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
winc.lpszMenuName = NULL;
winc.lpszClassName = TEXT("KITTY");
if (!RegisterClass(&winc)) return -1;
hwnd = CreateWindow(
TEXT("KITTY") , TEXT("Kitty on your lap") ,
WS_OVERLAPPEDWINDOW | WS_VISIBLE ,
CW_USEDEFAULT , CW_USEDEFAULT ,
CW_USEDEFAULT , CW_USEDEFAULT ,
NULL , NULL ,
hInstance , NULL
);
if (hwnd == NULL) return -1;
while(GetMessage(&msg , NULL , 0 , 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
設定は特にいじってない。
上記のコードは
http://wisdom.sakura.ne.jp/system/winap ... in104.html
のコードをそのまま使いました。
1.3 画像が表示されずウィンドウだけになる。
1.4 visualstudioのリソースの使い方が分からない。公式のリファレンス
https://msdn.microsoft.com/ja-jp/library/7zxb70x7.aspx
を読んでもわからなかったので
より簡単な説明が知りたい。
2.1 OS:windows10
2.2 VC++ 2015community
Re: visualstudioのリソースファイルについて
すいません
3が抜けていました。
3.1 c言語は入門書を読んだ程度です。
私はc++を勉強しているのですがこれも入門書を読んだ程度です。
習熟度の参考になるかはわかりませんが作成したプログラムを書きます。
:コンソールとDXライブラリを使用したGUIの両方でライフゲーム ---cとc++両方で作った。
:コンソール用にwinapiを使用した簡単な描画ライブラリ ---c++
:CUIランチャー ---c++
:探索アルゴリズムの勉強,テスト用の完全グラフを自動で作成するプログラム ---c++
これらと簡単な再帰を使ったものなどで
大きなプログラムは作ったことがないので
classを使っても継承とかは使ったことがないです。
3.2 ライブラリはwinapiを使うのに必要なものです。
user32とか。
3が抜けていました。
3.1 c言語は入門書を読んだ程度です。
私はc++を勉強しているのですがこれも入門書を読んだ程度です。
習熟度の参考になるかはわかりませんが作成したプログラムを書きます。
:コンソールとDXライブラリを使用したGUIの両方でライフゲーム ---cとc++両方で作った。
:コンソール用にwinapiを使用した簡単な描画ライブラリ ---c++
:CUIランチャー ---c++
:探索アルゴリズムの勉強,テスト用の完全グラフを自動で作成するプログラム ---c++
これらと簡単な再帰を使ったものなどで
大きなプログラムは作ったことがないので
classを使っても継承とかは使ったことがないです。
3.2 ライブラリはwinapiを使うのに必要なものです。
user32とか。
Re: visualstudioのリソースファイルについて
ここ”プログラムからBitmap画像を扱う(VC++) 1回目 ”http://fa11enprince.hatenablog.com/entr ... /24/023546に
詳しい説明があるのでご覧ください。
詳しい作動追跡を行うには次の様にDebugコンソールを追加すれば簡単です。
詳しい説明があるのでご覧ください。
詳しい作動追跡を行うには次の様にDebugコンソールを追加すれば簡単です。
#include <windows.h>
#include <stdio.h>
LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) {
HDC hdc , hBuffer;
PAINTSTRUCT ps;
static HBITMAP hBitmap;
switch (msg) {
case WM_DESTROY:
DeleteObject(hBitmap);
PostQuitMessage(0);
return 0;
case WM_CREATE:
hBitmap = LoadBitmap(
((LPCREATESTRUCT)lp)->hInstance ,
TEXT("KITTY")
);
printf("@--LoadBitmap(---->>\n\n");
return 0;
case WM_PAINT:
hdc = BeginPaint(hwnd , &ps);
hBuffer = CreateCompatibleDC(hdc);
SelectObject(hBuffer , hBitmap);
BitBlt(hdc , 0 , 0 , 400 , 120 , hBuffer , 70 , 80 , SRCCOPY);
DeleteDC(hBuffer);
EndPaint(hwnd , &ps);
return 0;
}
return DefWindowProc(hwnd , msg , wp , lp);
}
int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
PSTR lpCmdLine , int nCmdShow ) {
//----------------------------------------Debug printf用-----------
AllocConsole(); FILE* out = 0; freopen_s(&out, "CON", "w", stdout);
HWND hwnd;printf("Start-------------------------------->>>\n\n");
MSG msg;
WNDCLASS winc;
winc.style = CS_HREDRAW | CS_VREDRAW;
winc.lpfnWndProc = WndProc;
winc.cbClsExtra = winc.cbWndExtra = 0;
winc.hInstance = hInstance;
winc.hIcon = LoadIcon(NULL , IDI_APPLICATION);
winc.hCursor = LoadCursor(NULL , IDC_ARROW);
winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
winc.lpszMenuName = NULL;
winc.lpszClassName = TEXT("KITTY");
if (!RegisterClass(&winc)) return -1;
hwnd = CreateWindow(
TEXT("KITTY") , TEXT("Kitty on your lap") ,
WS_OVERLAPPEDWINDOW | WS_VISIBLE ,
CW_USEDEFAULT , CW_USEDEFAULT ,
CW_USEDEFAULT , CW_USEDEFAULT ,
NULL , NULL ,
hInstance , NULL
);
if (hwnd == NULL) return -1;
while(GetMessage(&msg , NULL , 0 , 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}//-----Free--Debug--------------------------
fclose(out); FreeConsole();return msg.wParam;
}
Re: visualstudioのリソースファイルについて
無事表示に成功しました。
ありがとうございました。
デバッグコンソールのやり方まで教えていただき大変助かります。
わたしはいろいろ調べるためによくprintfデバッグをするので
windowsプログラミングでもできるととてもたすかります。
visualstudioを使うのは結構難しいですね。
visualstudioを起動するのが面倒なのでいつもプロンプトでやっていたのですが
windowsプログラミングではこっちのほうが楽かなと思いやってみたのですが
そううまくはいかないようです。
でもプログラムの雛型ができているのはすごい楽なのでうれしいです。
ありがとうございました。
デバッグコンソールのやり方まで教えていただき大変助かります。
わたしはいろいろ調べるためによくprintfデバッグをするので
windowsプログラミングでもできるととてもたすかります。
visualstudioを使うのは結構難しいですね。
visualstudioを起動するのが面倒なのでいつもプロンプトでやっていたのですが
windowsプログラミングではこっちのほうが楽かなと思いやってみたのですが
そううまくはいかないようです。
でもプログラムの雛型ができているのはすごい楽なのでうれしいです。