//////////////////////////////////////////
// ListViewProc.h
// Copyright (c) 01/11/2003 by BCCSkelton
//////////////////////////////////////////
/////////////////////////////////
//主ウィンドウCMyWndの関数の定義
//ウィンドウメッセージ関数
/////////////////////////////////
bool CMyWnd::OnCreate(WPARAM wParam, LPARAM lParam) {

	//☆リストビューコントロールの作成
	lv.Create(m_hWnd, m_hInstance, IDC_LISTVIEW);
	//☆リストビューコントロールにアイコンを登録
	lv.AddLargeIcon(MAKEINTRESOURCE(MYICON1));
	lv.AddLargeIcon(MAKEINTRESOURCE(MYICON2));
	lv.AddLargeIcon(MAKEINTRESOURCE(MYICON3));
	lv.AddLargeIcon(MAKEINTRESOURCE(MYICON4));
	lv.AddSmallIcon(MAKEINTRESOURCE(S1));
	lv.AddSmallIcon(MAKEINTRESOURCE(S2));
	lv.AddSmallIcon(MAKEINTRESOURCE(S3));
	lv.AddSmallIcon(MAKEINTRESOURCE(S4));
	//☆列の表題を作成
	lv.InsertColumn(0, 100, "国名");
	lv.InsertColumn(1, 200, "首都");
	lv.InsertColumn(2, 100, "言語");
	//☆データの登録
	lv.InsertItem(0, "日本", 0, 0, LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM);
	lv.SetItem(0, 1, "東京");
	lv.SetItem(0, 2, "Japanese");
	lv.InsertItem(1, "米国", 1, 1, LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM);
	lv.SetItem(1, 1, "ワシントン");
	lv.SetItem(1, 2, "English");
	lv.InsertItem(2, "英国", 2, 2, LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM);
	lv.SetItem(2, 1, "ロンドン");
	lv.SetItem(2, 2, "English");
	lv.InsertItem(3, "フランス", 3, 3, LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM);
	lv.SetItem(3, 1, "パリ");
	lv.SetItem(3, 2, "French");
	return TRUE;
}

bool CMyWnd::OnNotify(WPARAM wParam, LPARAM lParam) {

	LV_DISPINFO* lvinfo;
	NM_LISTVIEW* pNMLV;
	static HWND hEdit;
	static char buf[1024];
	//☆リストビューからのメッセージ
	if ((int)wParam == IDC_LISTVIEW) {
		lvinfo = (LV_DISPINFO*)lParam;
		switch (lvinfo->hdr.code) {
		//☆ラベル編集開始
		case LVN_BEGINLABELEDIT:
			hEdit = lv.GetEditControl();
			break;
		//☆ラベル編集完了
		case LVN_ENDLABELEDIT:
			SendMessage(hEdit, WM_GETTEXT, sizeof(buf), (LPARAM)buf);
			lv.SetItemText(lvinfo->item.iItem, 0, buf);
			break;
		//☆列の表題部がクリックされた
		case LVN_COLUMNCLICK:
			pNMLV = (NM_LISTVIEW*)lParam;
			if (sortsubno[pNMLV->iSubItem] == UP)
				sortsubno[pNMLV->iSubItem] = DOWN;
			else
				sortsubno[pNMLV->iSubItem] = UP;
			lv.SortItem(MyCompProc, pNMLV->iSubItem);
			break;
		}
	}
	return TRUE;
}

bool CMyWnd::OnSize(WPARAM wParam, LPARAM lParam) {

	//☆リストビューコントロールをクライアント領域にあわせる
	lv.Move(0, 0, LOWORD(lParam), HIWORD(lParam));
	return TRUE;
}

bool CMyWnd::OnClose(WPARAM wParam, LPARAM lParam) {

	if(MessageBox(m_hWnd, "終了しますか", "終了確認",
					MB_YESNO | MB_ICONINFORMATION) == IDYES)
		//処理をするとDestroyWindow、PostQuitMessageが呼ばれる
		return TRUE;
	else
		//そうでなければウィンドウではDefWindowProc関数をreturn、ダイアログではreturn FALSEとなる。
		return FALSE;
}

/////////////////////////////////
//主ウィンドウCMyWndの関数の定義
//メニュー項目、コントロール関数
/////////////////////////////////
bool CMyWnd::OnEnd() {

	SendMsg(WM_CLOSE, 0, 0);
	return TRUE;
}

bool CMyWnd::OnDel() {

	int count = 0, nItem;
	//☆選択されたアイテムの削除
	while(1) {
		nItem = lv.GetNextItem(-1, LVNI_ALL | LVNI_SELECTED);
		if (nItem == -1) {
			if(!count)
				MessageBox(m_hWnd, "項目が選択されていません", "警告", MB_OK);
			break;
		}
		lv.DeleteItem(nItem);
		lv.Arrange(LVA_ALIGNLEFT);
		count++;
	}
	return TRUE;
}

bool CMyWnd::OnEdit() {

	//☆ラベルの編集
	lv.Editable();	//☆ListViewをラベル編集が可能なモードにする
	int Selected = lv.GetNextItem(-1, LVNI_ALL | LVNI_SELECTED);
	if (Selected == -1) {
		MessageBox(m_hWnd, "項目が選択されていません", "警告", MB_OK);
		return TRUE;
	}
	lv.EditLabel(Selected);
	return TRUE;
}

bool CMyWnd::OnLarge() {

	//☆大きなアイコンの表示
	lv.DisplayLarge();
	return TRUE;
}

bool CMyWnd::OnSmall() {

	//☆小さなアイコンの表示
	lv.DisplaySmall();
	return TRUE;
}

bool CMyWnd::OnList() {

	//☆リスト表示
	lv.DisplayList();
	return TRUE;
}

bool CMyWnd::OnTable() {

	//☆レポート形式表示
	lv.DisplayReport();
	return TRUE;
}

///////////////////////////////
//ユーザーダイアログの関数定義
//コントロール関数
///////////////////////////////
