Win32プログラミングしてみよう
Win32なGUIプログラムが全然わからない。普段の環境がWindowsだし、ちょいちょい適当に簡単なプログラムとか作りたい。ということでちょっとやってみる。言語はC/C++とかで。
Google先生が教えてくれた参考になりそうなところを適当に列挙
- http://www.kumei.ne.jp/c_lang/index_sdk.html
- http://www.expertmg.co.jp/html/cti/vctips/
- http://hp.vector.co.jp/authors/VA000092/win32/index.html
- http://www.dotaster.com/doc/sdk/step1.html
- http://wisdom.sakura.ne.jp/system/winapi/win32/index.html
- http://www.kt.rim.or.jp/~yuta/prog/win32/index.html
- http://bu-nyan.m.to/sdk/program_api.htm
- http://hp.vector.co.jp/authors/VA023539/tips/
- http://www.sm.rim.or.jp/~shishido/windows.html
Hello, World!
hello.cxx
#include<windows.h> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance , LPSTR lpCmdLine , int nCmdShow ) { MessageBox(NULL,"Hello, World!","ほげほげ",MB_OK); return 0; }
>cl hello.cxx user32.lib Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86 Copyright (C) Microsoft Corp 1984-1998. All rights reserved. hello.cxx Microsoft (R) Incremental Linker Version 6.00.8447 Copyright (C) Microsoft Corp 1992-1998. All rights reserved. /out:hello.exe hello.obj user32.lib
もうちょっと静かにコンパイルしてほしいもんだ。基本コマンドラインじゃなくてIDEから使うもんだからかな。
動的に呼び出してみるとこんなかんじ? 動的ライブラリの使い方とかよくわからん。
dhello.cxx
#include <windows.h> typedef int (WINAPI *MBoxAPI)(HWND, LPCTSTR, LPCTSTR, UINT); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance , LPSTR lpCmdLine , int nCmdShow ) { HINSTANCE hDLL = LoadLibrary("user32.dll"); MBoxAPI MBox = (MBoxAPI)::GetProcAddress(hDLL, "MessageBoxA"); MBox(NULL,"ほげ","ほげほげ",MB_OK); FreeLibrary(hDLL); return 0; }
コマンドライン引数を表示させる
コマンドライン引数を表示させてみた。時々こんなプログラム欲しくなることがある。下の画像は、適当に複数ファイルをこのプログラムにD&Dして起動させた時のダイアログ。
cmdline.c
#include <windows.h> #define MAXCHAR 65536 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance , LPSTR lpCmdLine , int nCmdShow ) { int argc, i; wchar_t **argv, lpCmdText[MAXCHAR], tmp[MAXCHAR]; argv = CommandLineToArgvW(GetCommandLineW(), &argc); wcscpy(lpCmdText, L""); for(i=0;i<argc;++i){ wcscat(lpCmdText, argv[i]); wcscat(lpCmdText, L"\n"); } MessageBoxW(NULL, lpCmdText, L"ほげほげ", MB_OK); return 0; }
普通のCプログラムなんだけど、なんとなくキャラクターをワイド文字に。
cl cmdline.c user32.lib shell32.lib
でコンパイル。