|
Win32APIを使っていても AllocConsole();
freopen("CONOUT$", "w", stdout);
freopen("CONIN$", "r", stdin);
コンソールも開きます また、次のようにいつものコンソールプロジェクトでウィンドウを作成することも可能です コンソールを選択します 次へ ・コンソールアプリケーション コンソールアプリケーションなので // ウィンドウズバージョン指定
#define _WIN32_WINNT 0x0500
#include <stdio.h>
#include <stdlib.h>
#include <tchar.h>
#include <windows.h>
#include <windowsx.h>
#include <commctrl.h>
#pragma comment(lib,"comctl32.lib")
#pragma comment(lib,"winmm.lib")
// コンソール画面隠蔽
//#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
// ウィンドウプロシージャ
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
int main(int argc,char* argv[])
{
HINSTANCE hInstance = GetModuleHandle(NULL); // インスタンスハンドル取得
const TCHAR* WC_BASIC = _T("Basic"); // ウィンドウクラス名
/********************************************************/
/* ウィンドウクラスの定義と作成 */
/********************************************************/
// シンプルウィンドウクラス設定
WNDCLASSEX wcex ={sizeof(WNDCLASSEX), CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS, WndProc, 0,0,hInstance,
(HICON)LoadImage(NULL,MAKEINTRESOURCE(IDI_APPLICATION),IMAGE_ICON,0,0,LR_DEFAULTSIZE | LR_SHARED),
(HCURSOR)LoadImage(NULL,MAKEINTRESOURCE(IDC_ARROW),IMAGE_CURSOR,0,0,LR_DEFAULTSIZE | LR_SHARED),
(HBRUSH)GetStockObject(WHITE_BRUSH), NULL, WC_BASIC , NULL};
// シンプルウィンドウクラス作成
if(!RegisterClassEx(&wcex))
return -1;
/********************************************************/
/* ウィンドウの作成 */
/********************************************************/
HWND hWnd = CreateWindowEx(
0, //拡張ウィンドウスタイル
WC_BASIC, //ウィンドウクラス名
_T("タイトル"), //タイトルバーにこの名前が表示されます
WS_OVERLAPPEDWINDOW, //ウィンドウスタイル
CW_USEDEFAULT, //X座標
CW_USEDEFAULT, //Y座標
CW_USEDEFAULT, //幅
CW_USEDEFAULT, //高さ
NULL, //親ウィンドウのハンドル、親を作るときはNULL
NULL, //メニューハンドルorリソースID
hInstance, //インスタンスハンドル
NULL);
// ウィンドウ作成失敗
if (hWnd == NULL)
return -1;
// ウィンドウを可視状態にする
ShowWindow(hWnd, SW_SHOW);
UpdateWindow(hWnd);
/********************************************************/
/* メッセージループ */
/********************************************************/
MSG msg = {};
while(msg.message != WM_QUIT) {
if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else{
// メッセージ処理をしてないとき
}
}
return 0;
}
// ウィンドウプロシージャ
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg) {
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return (DefWindowProc(hWnd, msg, wParam, lParam));
}
肝心のインスタンスハンドルの取得は一行だけです HINSTANCE hInstance = GetModuleHandle(NULL); // インスタンスハンドル取得 あとウィンドウクラスの定義を短くまとめました また、 // コンソール画面隠蔽 #pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"") この章以降はウィンドウを作成する部分よりも 全ソースコードは下から
|