アップダウンコントロールを作成する(C/C++版)
アップダウンコントロールを作成するサンプルです。
サンプルの実行画面
ソースコード
[Sample62.c]
//-------------------------------------------------------------------------------------- // ■アップダウンコントロールを作成する■ Sample NO.62 // //-------------------------------------------------------------------------------------- //リンクの設定 //comctl32.lib をリンクしてください。 #include <windows.h> #include <commctrl.h> HWND hUpdown,hEdit; #define ID_UPDOWN 100 #define ID_BUTTON1 101 #define ID_EDIT 102 //ウインドウを中央にする為にX座標(LEFT)とY座標(TOP)算出するマクロ #define ScreenCenterX(Width) ((0)<((int)((GetSystemMetrics(SM_CXSCREEN)- Width) / 2)) ? ((int)((GetSystemMetrics(SM_CXSCREEN)- Width) / 2)) :(0)) #define ScreenCenterY(Height) ((0)<((int)((GetSystemMetrics(SM_CYSCREEN)- Height) / 2)) ? ((int)((GetSystemMetrics(SM_CYSCREEN)- Height) / 2)) :(0)) //いつものプロシージャ HWND CreateMainWindow(int Width,int Height,LPCTSTR Caption,HINSTANCE hInstance,int nCmdShow,WNDPROC lpfnWndProc, DWORD dwstyle,DWORD dwExstyle,LPCTSTR MenuID,HICON hIcon); HWND CreateControlWindow(HWND hwndParent, int Left, int Top,int Width, int Height,int dwExStyle ,int dwFlag ,LPCTSTR Caption, LPCTSTR ClassName,HMENU ChildID,HINSTANCE hInstance); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow); LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam); //------------------------------------------------------ //■関数 CreateMainWindow //■用途 メインウインドウを作成する //■引数 // Width ...ウインドウの横幅 // Height ...ウインドウの縦幅 // Caption ...タイトル名 // hInstance ...インスタンスハンドル // nCmdShow ...ウインドウの表示形態 // lpfnWndProc ...コールバックプロシージャ // dwstyle ...ウインドウスタイル // dwExstyle ...拡張ウインドウスタイル // MenuID ...メニューのID // hIcon ...アイコン //■戻り値 // ウインドウのハンドル //------------------------------------------------------ HWND CreateMainWindow(int Width,int Height,LPCTSTR Caption,HINSTANCE hInstance,int nCmdShow,WNDPROC lpfnWndProc, DWORD dwstyle,DWORD dwExstyle,LPCTSTR MenuID,HICON hIcon) { HWND hWnd; //メインウインドウのハンドル WNDCLASS myClass; //WNDCLASS構造体 //WNDCLASS構造体を0で初期化 ZeroMemory(&myClass,sizeof(WNDCLASS)); //--->WNDCLASS構造体の設定&ウインドウクラスの登録 myClass.style =CS_HREDRAW | CS_VREDRAW; //ウインドウスタイルを設定 myClass.lpfnWndProc = lpfnWndProc; //コールバックプロシージャへのポインタ myClass.hInstance=hInstance; //インスタンスハンドルを設定 myClass.hCursor=LoadCursor(NULL, IDC_ARROW); //カーソルの設定(Windows標準リソースを使用) myClass.hbrBackground=(HBRUSH)COLOR_WINDOW; //ウインドウの背景を設定(デフォルトカラー) myClass.lpszClassName="TForm"; //クラス名の設定(Borland Delphi風) myClass.hIcon =hIcon; //アイコンの指定 myClass.lpszMenuName=MenuID; //メニューの設定 //ウィンドウ クラスdを登録 RegisterClass(&myClass); //--->ウインドウの作成&表示 //メインウインドウの生成 hWnd = CreateWindowEx( dwExstyle, //拡張ウインドウスタイル "TForm", //登録されたクラス名のアドレス Caption, //ウインドウ名 dwstyle, //ウインドウスタイルを設定 ScreenCenterX(Width), //X座標の位置設定 ScreenCenterY(Height),//Y座標の位置設定 Width, //横幅を設定 Height, //縦幅を設定 NULL, //親ウインドウを設定 NULL, //メニューを設定 hInstance, //インスタンスを識別 NULL); //作成したウインドウに渡すデータへのポインタ //ウインドウの表示(表示方法はnCmdShowに従う) ShowWindow(hWnd, nCmdShow); return(hWnd); } //------------------------------------------------------ //■関数名 ControlCreate //■用途 ウインドウ(コントロール)を作成 //■引数 // hwndParent ...親ウインドウのハンドル // Left ...作成するウインドウの左隅のX座標 // Top ...作成するウインドウの左隅のY座標 // Width ...作成するウインドウの横幅 // Height ...作成するウインドウの縦幅 // dwExStyle ...ウインドウの拡張フラグ // dwFlag ...ウインドウの作成フラグ // Caption ...作成するウインドウのキャプション // ClassName ...作成するウインドウクラス名 // ChildID ...子ウインドウの識別子 // hInstance ...インスタンスハンドル //■戻り値 // 子ウインドウのハンドル //------------------------------------------------------ HWND CreateControlWindow(HWND hwndParent, int Left, int Top,int Width, int Height,int dwExStyle ,int dwFlag ,LPCTSTR Caption, LPCTSTR ClassName,HMENU ChildID,HINSTANCE hInstance) { return CreateWindowEx(dwExStyle,ClassName,Caption,WS_CHILD | WS_VISIBLE | dwFlag , Left, Top, Width, Height, hwndParent, ChildID, hInstance, NULL); } //-------------------------------------------------------- //■関数 WinMain //■用途 メインの関数 //■引数 // hInstance ...現在のインスタンスのハンドル // hPrevInstance...以前のインスタンスのハンドル // pszCmdLine ...コマンド ラインのアドレス // nCmdShow ...ウィンドウの表示状態 //-------------------------------------------------------- int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow) { MSG msg; //メインウインドウを作成 CreateMainWindow(320,320,"アップダウンコントロールを作成する",hInstance,nCmdShow,(WNDPROC)WindowProc, WS_OVERLAPPEDWINDOW,WS_EX_CONTROLPARENT | WS_EX_WINDOWEDGE,NULL,LoadIcon(NULL,MAKEINTRESOURCE(IDI_APPLICATION))); //送られてくるメッセージを翻訳してプロシージャに渡す while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (msg.wParam); } //------------------------------------------------------ // ■関数 WindowProc // ■用途 メインウインドウに送られるメッセージを処理 // ■引数 // hwnd ...ウインドウのハンドル // uMsg ...メッセージID // wParam ...第1メッセージ パラメータ // lParam ...第2メッセージ パラメータ //------------------------------------------------------ LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam) { int _POS,_MAX,_MIN,word; char buffer[100]; switch (uMsg) { case WM_CREATE: CreateControlWindow(hwnd,10,80,290,25,0, BS_PUSHBUTTON ,"値の取得","BUTTON",(HMENU)ID_BUTTON1,(HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE)); hEdit=CreateControlWindow(hwnd,10,5,180,25,WS_EX_CLIENTEDGE , 0,"","EDIT",(HMENU)ID_EDIT,(HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE)); //コモンコントロールの初期化 InitCommonControls(); //アップダウンコントロールの作成 // ウインドウスタイル // UDS_WRAP 範囲を越えたとき値を折り返す // UDS_SETBUDDYINT 位置の変更をウインドウに自動的に表示する // UDS_ALIGNRIGHT アップダウンをウインドウの右に配置 // UDS_ALIGNLEFT アップダウンをウインドウの左に配置 // UDS_AUTOBUDDY Zオーダが一つ前のウインドウを自動的に親とする // UDS_ARROWKEYS 矢印キーで現在位置を変更できる // UDS_HORZ 水平アップダウンにする // UDS_NOTHOUSANDS 三桁ごとの区切り記号を表示しない //0-300の範囲.ポジションが100のアップダウンを作成 hUpdown=CreateUpDownControl(UDS_ALIGNRIGHT|UDS_ARROWKEYS|UDS_SETBUDDYINT|WS_CHILD | WS_VISIBLE,0,0,0,0, hwnd,ID_UPDOWN,(HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE),hEdit,300,0,100); break; case WM_COMMAND: if (LOWORD(wParam)==ID_BUTTON1) { //最小値/最大値を取得 word=SendMessage(hUpdown,UDM_GETRANGE,0,0); _MAX=LOWORD(word); _MIN=HIWORD(word); //現在値を取得 _POS=SendMessage(hUpdown,UDM_GETPOS,0,0); if ((_POS>_MAX) || (_POS<_MIN)) wsprintf(buffer,"値が0-300の範囲ではありません。"); else wsprintf(buffer,"現在のポシションは%dです。",_POS); MessageBox(hwnd,buffer,"情報",MB_OK); } break; case WM_DESTROY: PostQuitMessage(0); break; default:return(DefWindowProc(hwnd, uMsg, wParam, lParam)); } return (0); }
ソースコード一式のダウンロード
capi_sample62.zip 3,081 バイト
動作環境
このサンプルは 「Windows98」及び「Microsoft Visual C++5.0」「Borland C++ Compiler 5.5」で確認しております。環境が異なる場合は正常に動作しない場合もございますのでご了承下さい。
Visual C++5.0でのコンパイル
VC5.0でサンプルをコンパイルする場合は新規プロジェクト(Win32Application)を作成後、各ファイルを追加してビルドしてください。
Borland C++ Compiler 5.5でのコンパイル
BCC5.5でサンプルをコンパイルする場合は「bcc32.exe」で*.c又は*.cppファイルをコンパイルします。リソースがある場合は「brc32.exe」で*resファイルを付与してください。
サンプルについて
このWindows APIサンプル集(C/C++版)は2000年頃にC/C++言語の学習の為に作成したものです。コードはエレガントではなく「初心者レベルのコーディング」です。仕事などの業務で利用する際にはエラー処理やメモリ解放などの再確認を必ずして下さい。
スポンサーリンク
関連記事
公開日:2015年03月19日
記事NO:00518