0から始めるVisualStudio2022:ソフト開発塾

では次に、Windowsなんだからウィンドウを表示するプログラムを作成してみることに
前回の続きから
『ファイル』『追加』『新しいプロジェクト』
C++の空のプロジェクトを選んで
前回同様に
sample003のプロジェクトで
『プロジェクト』『新しい項目の追加』で、
sample003.cppを作成します。


前回同様に
sample003のプロジェクトで
『プロジェクト』『新しい項目の追加』で、
sample003.cppを作成します。
ソースファイルに、sample003.cppが追加される。
sample003を『プロジェクト』『スタートアッププロジェクトに設定』で変更しておく
sample003.cppにプログラムをコーディング
通常のC言語だとmain関数がスタートですが、Windowsの場合、WinMainでおこないます。
#include <windows.h>
static TCHAR szWindowClass[] = {'s','a','m','p','l','e','\0'};	// sample 
static TCHAR szTitle[] = {'S','A','M','P','L','E','\0'};	// SAMPLE 
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
//
int WINAPI WinMain(
   _In_ 		HINSTANCE hInstance,
   _In_opt_ 	HINSTANCE hPrevInstance,
   _In_ 		LPSTR     lpCmdLine,
   _In_ 		int       nCmdShow){
   WNDCLASSEX wcex;

   wcex.cbSize = sizeof(WNDCLASSEX);
   wcex.style          = CS_HREDRAW | CS_VREDRAW;
   wcex.lpfnWndProc    = WndProc;
   wcex.cbClsExtra     = 0;
   wcex.cbWndExtra     = 0;
   wcex.hInstance      = hInstance;
   wcex.hIcon          = LoadIcon(wcex.hInstance, IDI_APPLICATION);
   wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
   wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
   wcex.lpszMenuName   = NULL;
   wcex.lpszClassName  = szWindowClass;
   wcex.hIconSm        = LoadIcon(wcex.hInstance, IDI_APPLICATION);

   if (!RegisterClassEx(&wcex))   {
      return 1;
   }

   HWND hWnd = CreateWindowEx(
      WS_EX_OVERLAPPEDWINDOW,
      szWindowClass,
      szTitle,
      WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, CW_USEDEFAULT,
      500, 100,
      NULL,
      NULL,
      hInstance,
      NULL
   );

   if (!hWnd)   {
      return 1;
   }

   ShowWindow(hWnd,      nCmdShow);

   // Main message loop:
   MSG msg;
   while (GetMessage(&msg, NULL, 0, 0))   {
      TranslateMessage(&msg);
      DispatchMessage(&msg);
   }
   return (int) msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){
   switch (message)   {
   case WM_DESTROY:
      PostQuitMessage(0);
      break;
   default:
      return DefWindowProc(hWnd, message, wParam, lParam);
      break;
   }
   return 0;
}
ビルドしてみる。
エラーが出て怒られた。
1>MSVCRTD.lib(exe_main.obj) : error LNK2019: 未解決の外部シンボル main が関数 "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) で参照されました
1>C:\softca\sample\x64\Debug\sample003.exe : fatal error LNK1120: 1 件の未解決の外部参照
リンクでエラーが出ているようだ。
エラーが出ないように、リンクの設定を変える
『プロジェクト』『プロパティ』の「リンカー」「システム」
サブシステムを「コンソール」から「Windows」に変える
ビルドしてみる。
今度はエラーが無い様だ。では、実行してみよう!!
『デバック』『デバックなしで開始』
やったね!!完成
フォーム(ウィンドウ)が起動できた。
デバッグモードで、動作を確認して、Windowsプログラムを理解しようw
Top