リストビューコントロールを作成する(C/C++版)
リストビューコントロールを作成するサンプルです。
サンプルの実行画面
ソースコード
[Sample74.c]
//-------------------------------------------------------------------------------------- // ■リストビューコントロールを作成する■ Sample NO.74 // //-------------------------------------------------------------------------------------- //リンクの設定 //comctl32.lib をリンクしてください。 #include <windows.h> #include <commctrl.h> HWND hListView=NULL; //リストビューコントロールのハンドル HIMAGELIST hImageList=NULL; //イメージリストのハンドル //コマンドID #define ID_LISTVIEW 300 //リソースID #define ID_RES1 101 #define ID_RES2 102 #define ID_RES3 103 #define ID_RES4 104 #define ID_RES5 105 //ウインドウを中央にする為に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); 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; //メニューの設定 //ウィンドウ クラスを登録 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); } //-------------------------------------------------------- //■関数 WinMain //■用途 メインの関数 //■引数 // hInstance ...現在のインスタンスのハンドル // hPrevInstance...以前のインスタンスのハンドル // pszCmdLine ...コマンド ラインのアドレス // nCmdShow ...ウィンドウの表示状態 //-------------------------------------------------------- int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow) { MSG msg; //メインウインドウを作成 CreateMainWindow(300,300,"リストビューコントロールを作成する",hInstance,nCmdShow,(WNDPROC)WindowProc, WS_OVERLAPPEDWINDOW|WS_TABSTOP,WS_EX_CONTROLPARENT,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) { switch (uMsg) { case WM_CREATE: { HICON hICO; int i; LV_ITEM ListItem; //イメージリストコントロールの作成 InitCommonControls(); hImageList = ImageList_Create(32, 32, ILC_COLOR | ILC_MASK, 5, 0); //イメージリストにリソースアイコンを追加 for (i=1;i<6;i++) { hICO = LoadIcon((HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),(LPCTSTR)100+i); ImageList_AddIcon(hImageList, hICO); DeleteObject(hICO); } //リストビューコントロールの作成 InitCommonControls(); //アイコンタイプリストビュー hListView=CreateWindowEx(WS_EX_CLIENTEDGE,WC_LISTVIEW,"", WS_CHILD | WS_VISIBLE | LVS_ICON, 0,0,300,300,hwnd,(HMENU)ID_LISTVIEW,(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),NULL); //リストビューにイメージリストを割り当てる ListView_SetImageList(hListView,hImageList,LVSIL_NORMAL); ZeroMemory(&ListItem,sizeof(LV_ITEM)); //アイテム追加 ListItem.mask = LVIF_TEXT | LVIF_IMAGE; ListItem.pszText = "マイコンピュータ"; ListItem.iItem = 0; ListItem.iImage = 0; ListView_InsertItem(hListView, &ListItem); //アイテム追加 ListItem.pszText = "ごみ箱"; ListItem.iImage = 1; ListItem.iItem = 1; ListView_InsertItem(hListView, &ListItem); //アイテム追加 ListItem.pszText = "フォルダ"; ListItem.iImage = 2; ListItem.iItem = 2; ListView_InsertItem(hListView, &ListItem); //アイテム追加 ListItem.pszText = "ネットワーク?"; ListItem.iImage = 3; ListItem.iItem = 3; ListView_InsertItem(hListView, &ListItem); //アイテム追加 ListItem.pszText = "印刷"; ListItem.iImage = 4; ListItem.iItem = 4; ListView_InsertItem(hListView, &ListItem); break; } //case WM_NOTIFY: //WM_NOTIFYメッセージでリストビューのメッセージを受け取る case WM_DESTROY: //イメージリストを削除 ImageList_Destroy(hImageList); PostQuitMessage(0); break; default: return(DefWindowProc(hwnd, uMsg, wParam, lParam)); } return (0); }
ソースコード一式のダウンロード
capi_sample74.zip 4,051 バイト
動作環境
このサンプルは 「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:00530