C++でウィンドウと文字表示をするプログラム
やっと、、、やっと、ここまで出来た。
【今回でけたこと】
・ウィンドウの表示
・最大化・最小化を装備したウィンドウクラスの作成
・単純に文字を表示するだけ
・誰かに推奨された終了ルートの作成(exit(0)で終わるのはダメなんだってさw)
【良く分かんないこと】
ポインタ?なんぞ?それ。構造体の形を取る変数を覆う箱みたいなもんだよね?よくわかんね。
つか、そもそも構造体ってなんぞ?変数の集合体の変数だよね?よくわかんね。
HSPで全く使わなかった用語類に関しては、そんな感じのてけと~な理解なんでw
こりゃ長い道のりになりそうだ。。。
以下、ソース。
見ずらい所があったから原版とコメントの位置・内容を少し変えているが
「そんなことは誰も気にしない。」
=================================
//////////////////////////////////////////////////////////////////
////////////////////// === Window.cpp === /////////////////
///////////////////// C++でウィンドウ表示するapp //////////////////
//////////////////////////////////////////////////////////////////
//各種命令セットをインクルード
#include <windows.h>//「WindowsAPI」を使用するためにインクルード
//関数プロトタイプ(本体は下)
// ウィンドウプロシージャ「WndProc」
LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp);
//WinMain()関数
int WINAPI WinMain(
HINSTANCE hInstance , // インスタンスハンドル
HINSTANCE hPrevInstance , // 過去のインスタンスハンドル(Win16時代の産物、常にNULLでおk)
LPSTR lpCmdLine , // コマンドラインから受け取った引数(意味不明ww)
int nCmdShow ) { // アプリケーションの初期表示方法
HWND hwnd; //hwndをHWND型(ウィンドウハンドル)で初期化
WNDCLASS wndclass; //wndclassをWNDCLASS構造体で初期化(以下、変数の内容)
wndclass.style = CS_HREDRAW | CS_VREDRAW; //CS_で始まる定数のフラグの組み合わせ
wndclass.lpfnWndProc = WndProc; //ウィンドウプロシージャを指定
wndclass.cbClsExtra = 0; //構造体が使用する「余分な(extra)」メモリのサイズ(通常ゼロ)
wndclass.cbWndExtra = 0; //ウィンドウが使用する「余分な(extra)」メモリのサイズ(通常ゼロ)
wndclass.hInstance = hInstance; // 現在のインスタンスのハンドル
wndclass.hIcon = LoadIcon(NULL , IDI_APPLICATION); //アイコンリソースへのハンドルを指定
wndclass.hCursor = LoadCursor(NULL , IDC_ARROW); //カーソルリソースへのハンドルを指定
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //ウィンドウの背景色
wndclass.lpszMenuName = NULL; //メニューリソース(メニューバーのこと)
wndclass.lpszClassName = TEXT("class"); //ウィンドウクラス名
RegisterClass(&wndclass); //ウィンドウクラスを登録(引数はポインタで指定)
hwnd = CreateWindow( //CreateWindow関数…こいつでウィンドウを作成する。
TEXT("class"), TEXT ("Window.cpp") ,
WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX ,
CW_USEDEFAULT , CW_USEDEFAULT , 640 , 480 , NULL , NULL ,
hInstance , NULL
);
if (hwnd == NULL) {
MessageBox(NULL , TEXT("ウィンドウが正しく生成されませんでした。") , TEXT("異常終了")
, MB_OK | MB_ICONWARNING);
return 0;
exit(0);
};
ShowWindow( hwnd , SW_SHOW ); //ShowWindow関数…こいつでウィンドウを表示させる。
// メッセージループ
MSG msg;//msgをMSG構造体で初期化
while (GetMessage(&msg , NULL , 0 , 0)) DispatchMessage(&msg);
return msg.wParam;
}
// ウィンドウプロシージャ…メッセージを処理する専用のルーチン
LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) {
HDC hdc; //hdcをHDC型で初期化
PAINTSTRUCT ps; //psをPAINTSTRUCT構造体で初期化
static LPTSTR lptStr = TEXT("今日のシュタゲ(17話)微妙だったニャン♪ニャンニャンうるさいニャン♪");
switch (msg) { //switch-case式…switch(式)の式を計算し、caseの中で一致した物を実行。
case WM_DESTROY:
MessageBox(hwnd , TEXT("終わるお。") ,TEXT("通常終了") , MB_ICONINFORMATION);
PostQuitMessage(0);
return 0;
case WM_PAINT:
hdc = BeginPaint(hwnd , &ps);
TextOut(hdc , 10 , 10 , lptStr , lstrlen(lptStr));
EndPaint(hwnd , &ps);
return 0;
}
return DefWindowProc(hwnd , msg , wp , lp); //DefWindowProc=既定のウィンドウプロシージャ
} [EOF]
【今回でけたこと】
・ウィンドウの表示
・最大化・最小化を装備したウィンドウクラスの作成
・単純に文字を表示するだけ
・誰かに推奨された終了ルートの作成(exit(0)で終わるのはダメなんだってさw)
【良く分かんないこと】
ポインタ?なんぞ?それ。構造体の形を取る変数を覆う箱みたいなもんだよね?よくわかんね。
つか、そもそも構造体ってなんぞ?変数の集合体の変数だよね?よくわかんね。
HSPで全く使わなかった用語類に関しては、そんな感じのてけと~な理解なんでw
こりゃ長い道のりになりそうだ。。。
以下、ソース。
見ずらい所があったから原版とコメントの位置・内容を少し変えているが
「そんなことは誰も気にしない。」
=================================
//////////////////////////////////////////////////////////////////
////////////////////// === Window.cpp === /////////////////
///////////////////// C++でウィンドウ表示するapp //////////////////
//////////////////////////////////////////////////////////////////
//各種命令セットをインクルード
#include <windows.h>//「WindowsAPI」を使用するためにインクルード
//関数プロトタイプ(本体は下)
// ウィンドウプロシージャ「WndProc」
LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp);
//WinMain()関数
int WINAPI WinMain(
HINSTANCE hInstance , // インスタンスハンドル
HINSTANCE hPrevInstance , // 過去のインスタンスハンドル(Win16時代の産物、常にNULLでおk)
LPSTR lpCmdLine , // コマンドラインから受け取った引数(意味不明ww)
int nCmdShow ) { // アプリケーションの初期表示方法
HWND hwnd; //hwndをHWND型(ウィンドウハンドル)で初期化
WNDCLASS wndclass; //wndclassをWNDCLASS構造体で初期化(以下、変数の内容)
wndclass.style = CS_HREDRAW | CS_VREDRAW; //CS_で始まる定数のフラグの組み合わせ
wndclass.lpfnWndProc = WndProc; //ウィンドウプロシージャを指定
wndclass.cbClsExtra = 0; //構造体が使用する「余分な(extra)」メモリのサイズ(通常ゼロ)
wndclass.cbWndExtra = 0; //ウィンドウが使用する「余分な(extra)」メモリのサイズ(通常ゼロ)
wndclass.hInstance = hInstance; // 現在のインスタンスのハンドル
wndclass.hIcon = LoadIcon(NULL , IDI_APPLICATION); //アイコンリソースへのハンドルを指定
wndclass.hCursor = LoadCursor(NULL , IDC_ARROW); //カーソルリソースへのハンドルを指定
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //ウィンドウの背景色
wndclass.lpszMenuName = NULL; //メニューリソース(メニューバーのこと)
wndclass.lpszClassName = TEXT("class"); //ウィンドウクラス名
RegisterClass(&wndclass); //ウィンドウクラスを登録(引数はポインタで指定)
hwnd = CreateWindow( //CreateWindow関数…こいつでウィンドウを作成する。
TEXT("class"), TEXT ("Window.cpp") ,
WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX ,
CW_USEDEFAULT , CW_USEDEFAULT , 640 , 480 , NULL , NULL ,
hInstance , NULL
);
if (hwnd == NULL) {
MessageBox(NULL , TEXT("ウィンドウが正しく生成されませんでした。") , TEXT("異常終了")
, MB_OK | MB_ICONWARNING);
return 0;
exit(0);
};
ShowWindow( hwnd , SW_SHOW ); //ShowWindow関数…こいつでウィンドウを表示させる。
// メッセージループ
MSG msg;//msgをMSG構造体で初期化
while (GetMessage(&msg , NULL , 0 , 0)) DispatchMessage(&msg);
return msg.wParam;
}
// ウィンドウプロシージャ…メッセージを処理する専用のルーチン
LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) {
HDC hdc; //hdcをHDC型で初期化
PAINTSTRUCT ps; //psをPAINTSTRUCT構造体で初期化
static LPTSTR lptStr = TEXT("今日のシュタゲ(17話)微妙だったニャン♪ニャンニャンうるさいニャン♪");
switch (msg) { //switch-case式…switch(式)の式を計算し、caseの中で一致した物を実行。
case WM_DESTROY:
MessageBox(hwnd , TEXT("終わるお。") ,TEXT("通常終了") , MB_ICONINFORMATION);
PostQuitMessage(0);
return 0;
case WM_PAINT:
hdc = BeginPaint(hwnd , &ps);
TextOut(hdc , 10 , 10 , lptStr , lstrlen(lptStr));
EndPaint(hwnd , &ps);
return 0;
}
return DefWindowProc(hwnd , msg , wp , lp); //DefWindowProc=既定のウィンドウプロシージャ
} [EOF]