FC2ブログ

CListCtrl ポップアップメニュー

「CListCtrl 右クリックした位置のデータを取得する(後編)」のソースを修正して、リストの上で右クリックしたらポップアップメニューを表示し、ポップアップメニューの「データ取得」を選択するとリストのデータを表示させるようにします。
CListCtrl_PopupMenu001.png

      ↓ ポップアップメニューの「データ取得」を選択すると、リストのデータが表示される

CListCtrl_PopupMenu002.png

【ポイント】 ・CTestListViewの右クリック処理でポップアップメニューを表示させる ・OnCommandでポップアップメニューの「データ取得」のIDが選択されているのを判別し、「データ取得」が選択されていたらポップアップを表示するときに使用した右クリック位置を元にリストのデータを取得して表示する
※右クリック位置はCTestLiteViewクラスのメンバーとして保持しておく

■プログラム
・resource.h(変更)
#define IDM_END                            1001
#define IDC_LIST	                   1000
#define ID_POPUPMENU_GET_DATA              2000         // ← 追加


・CTestListView.h(変更)
#pragma once
#include 
class CTestListView : public CListCtrl
{
public:
	CPoint					m_RB_ClickPoint;               // ← 追加

private:
	void InsertMyColumn();
	void InsertMyItem();

public:
	DECLARE_MESSAGE_MAP()
	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
	afx_msg void OnSize(UINT nType, int cx, int cy);
	afx_msg void OnNMCustomdraw(NMHDR* pNMHDR, LRESULT* pResult);
	afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
	virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam);                  // ← 追加
};


・CTestListView.cpp(変更)
#include "CTestListView.h"
#include "resource.h"         // ← 追加


BEGIN_MESSAGE_MAP(CTestListView, CListCtrl)
	ON_WM_CREATE()
	ON_WM_SIZE()
	ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, &CTestListView::OnNMCustomdraw)
	ON_WM_RBUTTONDOWN()
END_MESSAGE_MAP()

void CTestListView::InsertMyColumn()
{
	LV_COLUMN lvcol;

	lvcol.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
	lvcol.fmt = LVCFMT_LEFT;
	lvcol.cx = 100;
	lvcol.pszText = (LPSTR)"名前";
	lvcol.iSubItem = 0;
	InsertColumn(0, &lvcol);

	lvcol.cx = 50;
	lvcol.pszText = (LPSTR)"性別";
	lvcol.iSubItem = 1;
	InsertColumn(1, &lvcol);

	lvcol.cx = 200;
	lvcol.pszText = (LPSTR)"住所";
	lvcol.iSubItem = 2;
	InsertColumn(2, &lvcol);

	return;
}


void CTestListView::InsertMyItem()
{
	LV_ITEM item;

	memset(&item, 0, sizeof(LV_ITEM));

	item.mask = LVIF_TEXT;
	item.pszText = (LPSTR)"鈴木 一郎";
	item.iItem = 0;
	item.iSubItem = 0;
	InsertItem(&item);

	item.pszText = (LPSTR)"男";
	item.iSubItem = 1;
	SetItem(&item);

	item.pszText = (LPSTR)"神奈川県鎌倉市";
	item.iSubItem = 2;
	SetItem(&item);

	item.pszText = (LPSTR)"杉山 双葉";
	item.iItem = 1;
	item.iSubItem = 0;
	InsertItem(&item);

	item.pszText = (LPSTR)"女";
	item.iSubItem = 1;
	SetItem(&item);

	item.pszText = (LPSTR)"兵庫県芦屋市";
	item.iSubItem = 2;
	SetItem(&item);

	item.pszText = (LPSTR)"太田 みく";
	item.iItem = 2;
	item.iSubItem = 0;
	InsertItem(&item);

	item.pszText = (LPSTR)"女";
	item.iSubItem = 1;
	SetItem(&item);

	item.pszText = (LPSTR)"東京都江戸川区";
	item.iSubItem = 2;
	SetItem(&item);

	return;
}


int CTestListView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CListCtrl::OnCreate(lpCreateStruct) == -1)
		return -1;

	InsertMyColumn();
	InsertMyItem();

	return 0;
}


void CTestListView::OnSize(UINT nType, int cx, int cy)
{
	CListCtrl::OnSize(nType, cx, cy);

	RECT rect;
	GetClientRect(&rect);
	MoveWindow(&rect);
}


void CTestListView::OnNMCustomdraw(NMHDR* pNMHDR, LRESULT* pResult)
{
	LPNMCUSTOMDRAW pNMCD = reinterpret_cast(pNMHDR);

	LPNMLVCUSTOMDRAW	lpCustomDraw = NULL;
	int					row = 0;
	int					col = 0;
	CString				strText = "";
	
	lpCustomDraw = (LPNMLVCUSTOMDRAW)pNMHDR;
	*pResult = CDRF_DODEFAULT;
	
	// 描画ステージ?
	switch (lpCustomDraw->nmcd.dwDrawStage) {
	case CDDS_PREPAINT:
		*pResult = CDRF_NOTIFYITEMDRAW;
		break;
	case CDDS_ITEMPREPAINT:
		row = lpCustomDraw->nmcd.dwItemSpec;
		col = lpCustomDraw->iSubItem;
	
		// 性別によって、リストの背景色を変える
		strText = GetItemText(row, 1);
		if (strText == "女")
		{
			lpCustomDraw->clrTextBk = RGB(230, 158, 216);
			lpCustomDraw->clrText = RGB(0, 0, 0);
		}
		else
		{
			lpCustomDraw->clrTextBk = RGB(128, 209, 241);
			lpCustomDraw->clrText = RGB(0, 0, 0);
		}
		*pResult = CDRF_NEWFONT;
		break;
	case (CDDS_SUBITEM | CDDS_ITEMPREPAINT):
		row = lpCustomDraw->nmcd.dwItemSpec;
		col = lpCustomDraw->iSubItem;
	
		// 性別によって、リストの背景色を変える
		strText = GetItemText(row, 1);
		if (strText == "女")
		{
			lpCustomDraw->clrTextBk = RGB(230, 158, 216);
			lpCustomDraw->clrText = RGB(0, 0, 0);
		}
		else
		{
			lpCustomDraw->clrTextBk = RGB(128, 209, 241);
			lpCustomDraw->clrText = RGB(0, 0, 0);
		}
		*pResult = CDRF_NEWFONT;
		break;
	default:
		*pResult = CDRF_DODEFAULT;
		break;
	}
	
	return;
}

// ▼------ 変更 ------▼
void CTestListView::OnRButtonDown(UINT nFlags, CPoint point)
{
	// 右クリック位置を保持
	m_RB_ClickPoint = point;

	// ポップアップメニューを表示
	ClientToScreen(&point);
	CMenu		cMenu;
	cMenu.CreatePopupMenu();
	cMenu.AppendMenu(MF_STRING | MF_ENABLED, ID_POPUPMENU_GET_DATA, "データ取得(&G)");
	cMenu.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);
	cMenu.DestroyMenu();

	CListCtrl::OnRButtonDown(nFlags, point);
}
// ▲--------------------▲

// ▼------ 追加 ------▼
BOOL CTestListView::OnCommand(WPARAM wParam, LPARAM lParam)
{
	// どのメニュー項目が選択されたかを判定する.
	// ※LOWORD(wParam)で選択されたメニュー項目のIDを取得できる
	switch (LOWORD(wParam)) {	
	case ID_POPUPMENU_GET_DATA:
		{
			// 保持してある右クリック位置を元にリストのデータを取得して表示する
			CString				strMsg = "";
			CString				strData = "";
			LVHITTESTINFO		tLvHitInfo;
			memset(&tLvHitInfo, 0x00, sizeof(tLvHitInfo));
			tLvHitInfo.pt = m_RB_ClickPoint;
			SubItemHitTest(&tLvHitInfo);

			if ((tLvHitInfo.iItem != -1) && (tLvHitInfo.iSubItem != -1))
			{
				strData = GetItemText(tLvHitInfo.iItem, tLvHitInfo.iSubItem);
				strMsg.Format("【Item(ROW):%d, SubItem(COL):%d】\n ⇒%s", tLvHitInfo.iItem, tLvHitInfo.iSubItem, strData);
				MessageBox(strMsg);
			}
		}
		break;
	}

	return CListCtrl::OnCommand(wParam, lParam);
}
// ▲--------------------▲


スポンサーサイト



CListCtrl 右クリックした位置のデータを取得する(後編)

「CListCtrl 右クリックした位置のデータを取得する(前編:CListCtrlのサブクラス化)」にて、CListCtrlのサブクラス化したCTestListViewにイベントが受けれる状態となったので、リスト上で右クリックしたときに、右クリックした位置のデータを表示するようにします。
CListCtrl_SubClass001.png
【ポイント】
・クラスウィザードを使用して、CTestListViewに右クリック押下のイベント(WM_RBUTTONDOWN)を追加する
・OnRButtonDownの引数(point)で右クリックした位置がわかるので、LVHITTESTINFO構造体のptにセットしてSubItemHitTest関数に引数として渡すと、リストのItem(行)・SubItem(列)が取得できる

■プログラム
・CTestListView.h(変更)
#pragma once
#include 
class CTestListView : public CListCtrl
{
	void InsertMyColumn();
	void InsertMyItem();

public:
	DECLARE_MESSAGE_MAP()
	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
	afx_msg void OnSize(UINT nType, int cx, int cy);
	afx_msg void OnNMCustomdraw(NMHDR* pNMHDR, LRESULT* pResult);
	afx_msg void OnRButtonDown(UINT nFlags, CPoint point);                         // ← 追加
};


・CTestListView.cpp(変更)
#include "CTestListView.h"


BEGIN_MESSAGE_MAP(CTestListView, CListCtrl)
	ON_WM_CREATE()
	ON_WM_SIZE()
	ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, &CTestListView::OnNMCustomdraw)
	ON_WM_RBUTTONDOWN()
END_MESSAGE_MAP()

void CTestListView::InsertMyColumn()
{
	LV_COLUMN lvcol;

	lvcol.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
	lvcol.fmt = LVCFMT_LEFT;
	lvcol.cx = 100;
	lvcol.pszText = (LPSTR)"名前";
	lvcol.iSubItem = 0;
	InsertColumn(0, &lvcol);

	lvcol.cx = 50;
	lvcol.pszText = (LPSTR)"性別";
	lvcol.iSubItem = 1;
	InsertColumn(1, &lvcol);

	lvcol.cx = 200;
	lvcol.pszText = (LPSTR)"住所";
	lvcol.iSubItem = 2;
	InsertColumn(2, &lvcol);

	return;
}


void CTestListView::InsertMyItem()
{
	LV_ITEM item;

	memset(&item, 0, sizeof(LV_ITEM));

	item.mask = LVIF_TEXT;
	item.pszText = (LPSTR)"鈴木 一郎";
	item.iItem = 0;
	item.iSubItem = 0;
	InsertItem(&item);

	item.pszText = (LPSTR)"男";
	item.iSubItem = 1;
	SetItem(&item);

	item.pszText = (LPSTR)"神奈川県鎌倉市";
	item.iSubItem = 2;
	SetItem(&item);

	item.pszText = (LPSTR)"杉山 双葉";
	item.iItem = 1;
	item.iSubItem = 0;
	InsertItem(&item);

	item.pszText = (LPSTR)"女";
	item.iSubItem = 1;
	SetItem(&item);

	item.pszText = (LPSTR)"兵庫県芦屋市";
	item.iSubItem = 2;
	SetItem(&item);

	item.pszText = (LPSTR)"太田 みく";
	item.iItem = 2;
	item.iSubItem = 0;
	InsertItem(&item);

	item.pszText = (LPSTR)"女";
	item.iSubItem = 1;
	SetItem(&item);

	item.pszText = (LPSTR)"東京都江戸川区";
	item.iSubItem = 2;
	SetItem(&item);

	return;
}


int CTestListView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CListCtrl::OnCreate(lpCreateStruct) == -1)
		return -1;

	InsertMyColumn();
	InsertMyItem();

	return 0;
}


void CTestListView::OnSize(UINT nType, int cx, int cy)
{
	CListCtrl::OnSize(nType, cx, cy);

	RECT rect;
	GetClientRect(&rect);
	MoveWindow(&rect);
}


void CTestListView::OnNMCustomdraw(NMHDR* pNMHDR, LRESULT* pResult)
{
	LPNMCUSTOMDRAW pNMCD = reinterpret_cast(pNMHDR);

	LPNMLVCUSTOMDRAW	lpCustomDraw = NULL;
	int					row = 0;
	int					col = 0;
	CString				strText = "";
	
	lpCustomDraw = (LPNMLVCUSTOMDRAW)pNMHDR;
	*pResult = CDRF_DODEFAULT;
	
	// 描画ステージ?
	switch (lpCustomDraw->nmcd.dwDrawStage) {
	case CDDS_PREPAINT:
		*pResult = CDRF_NOTIFYITEMDRAW;
		break;
	case CDDS_ITEMPREPAINT:
		row = lpCustomDraw->nmcd.dwItemSpec;
		col = lpCustomDraw->iSubItem;
	
		// 性別によって、リストの背景色を変える
		strText = GetItemText(row, 1);
		if (strText == "女")
		{
			lpCustomDraw->clrTextBk = RGB(230, 158, 216);
			lpCustomDraw->clrText = RGB(0, 0, 0);
		}
		else
		{
			lpCustomDraw->clrTextBk = RGB(128, 209, 241);
			lpCustomDraw->clrText = RGB(0, 0, 0);
		}
		*pResult = CDRF_NEWFONT;
		break;
	case (CDDS_SUBITEM | CDDS_ITEMPREPAINT):
		row = lpCustomDraw->nmcd.dwItemSpec;
		col = lpCustomDraw->iSubItem;
	
		// 性別によって、リストの背景色を変える
		strText = GetItemText(row, 1);
		if (strText == "女")
		{
			lpCustomDraw->clrTextBk = RGB(230, 158, 216);
			lpCustomDraw->clrText = RGB(0, 0, 0);
		}
		else
		{
			lpCustomDraw->clrTextBk = RGB(128, 209, 241);
			lpCustomDraw->clrText = RGB(0, 0, 0);
		}
		*pResult = CDRF_NEWFONT;
		break;
	default:
		*pResult = CDRF_DODEFAULT;
		break;
	}
	
	return;
}

// ▼------ 追加 ------▼
void CTestListView::OnRButtonDown(UINT nFlags, CPoint point)
{
	CString				strMsg = "";
	CString				strData = "";
	LVHITTESTINFO		tLvHitInfo;
	memset(&tLvHitInfo, 0x00, sizeof(tLvHitInfo));
	tLvHitInfo.pt = point;
	SubItemHitTest(&tLvHitInfo);

	if ((tLvHitInfo.iItem != -1) && (tLvHitInfo.iSubItem != -1))
	{
		strData = GetItemText(tLvHitInfo.iItem, tLvHitInfo.iSubItem);
		strMsg.Format("【Item(ROW):%d, SubItem(COL):%d】\n ⇒%s", tLvHitInfo.iItem, tLvHitInfo.iSubItem, strData);
		MessageBox(strMsg);
	}

	CListCtrl::OnRButtonDown(nFlags, point);
}
// ▲--------------------▲


CListCtrl 右クリックした位置のデータを取得する(前編:CListCtrlのサブクラス化)

リスト部分を右クリックした位置のデータを取得するのにりすと(CListCtrl)のイベントを取得しなければいけないため、CListCtrlを継承するCTestListViewクラスを作成します。
「CListCtrl カスタムドロー」のソースをもとに作成していきます

【ポイント】
・CListCtrlを継承したCTestListViewクラスを作成する
・CFrameWnd_クラスに実装していた、InsertMyColumn・InsertMyItem・OnCustomDrawメソッドをCTestListViewクラスへ移す
・CTestListViewクラスにOnCreateメソッドにリストヘッダー表示とリストデータの処理・OnSizeメソッドにウィンドウサイズが変化した際にリストビューのサイズを変更する処理を追加

■プログラム(変更があった部分だけ掲載します)
・ListCtrl_TestApp.cpp(変更)
#include 
#include 
#include "CTestListView.h"			// ← 追加
#include "resource.h"


//---[ CFrameWnd_ ]--------------------------------------------
// CFrameWndの派生クラスCFrameWnd_の定義
class CFrameWnd_ : public CFrameWnd
{
public:

//	CListCtrl						m_cListCtrl;
	CTestListView					m_cListCtrl;

	// コンストラクタ
	CFrameWnd_();
	
	void OnEnd();
//	void InsertMyColumn();			// CTestListViewに移動
//	void InsertMyItem();			// CTestListViewに移動

	// メッセージマップの利用を宣言
	DECLARE_MESSAGE_MAP()
	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
	afx_msg void OnSize(UINT nType, int cx, int cy);
//	afx_msg void OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult);			// CTestListViewに移動のため
};

// CFrameWnd_のメッセージマップ
BEGIN_MESSAGE_MAP(CFrameWnd_, CFrameWnd)
	ON_COMMAND(IDM_END,OnEnd)
	ON_WM_CREATE()
	ON_WM_SIZE()
//	ON_NOTIFY(NM_CUSTOMDRAW, IDC_LIST, OnCustomDraw)					// CTestListViewに移動のため
END_MESSAGE_MAP()

CFrameWnd_::CFrameWnd_()
{
	// フレームウィンドウの作成
	Create(NULL, "AppTest", WS_OVERLAPPEDWINDOW, rectDefault, NULL, "MYMENU");
}

void CFrameWnd_::OnEnd()
{
	SendMessage(WM_CLOSE);
}

int CFrameWnd_::OnCreate(LPCREATESTRUCT lpCreateStruct)
{

	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;

	DWORD dwStyle;
	RECT rect;
	this->GetClientRect(&rect);
	m_cListCtrl.CreateEx(0, WS_CHILD | WS_VISIBLE | LVS_REPORT, rect, this, IDC_LIST);
	dwStyle = m_cListCtrl.GetExtendedStyle();
	dwStyle |= LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_HEADERDRAGDROP;
	m_cListCtrl.SetExtendedStyle(dwStyle);
//	InsertMyColumn();		// CTestListViewに移動のため
//	InsertMyItem();			// CTestListViewに移動のため

	return 0;
}


// CTestListViewに移動のため
#if 0
//void CFrameWnd_::InsertMyColumn()
//{
//	LV_COLUMN lvcol;
//
//	lvcol.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
//	lvcol.fmt = LVCFMT_LEFT;
//	lvcol.cx = 100;
//	lvcol.pszText = (LPSTR)"名前";
//	lvcol.iSubItem = 0;
//	m_cListCtrl.InsertColumn(0, &lvcol);
//
//	lvcol.cx = 50;
//	lvcol.pszText = (LPSTR)"性別";
//	lvcol.iSubItem = 1;
//	m_cListCtrl.InsertColumn(1, &lvcol);
//
//	lvcol.cx = 200;
//	lvcol.pszText = (LPSTR)"住所";
//	lvcol.iSubItem = 2;
//	m_cListCtrl.InsertColumn(2, &lvcol);
//
//	return;
//}
//
//
//void CFrameWnd_::InsertMyItem()
//{
//	LV_ITEM item;
//
//	memset(&item, 0, sizeof(LV_ITEM));
//
//	item.mask = LVIF_TEXT;
//	item.pszText = (LPSTR)"鈴木 一郎";
//	item.iItem = 0;
//	item.iSubItem = 0;
//	m_cListCtrl.InsertItem(&item);
//
//	item.pszText = (LPSTR)"男";
//	item.iSubItem = 1;
//	m_cListCtrl.SetItem(&item);
//
//	item.pszText = (LPSTR)"神奈川県鎌倉市";
//	item.iSubItem = 2;
//	m_cListCtrl.SetItem(&item);
//
//	item.pszText = (LPSTR)"杉山 双葉";
//	item.iItem = 1;
//	item.iSubItem = 0;
//	m_cListCtrl.InsertItem(&item);
//
//	item.pszText = (LPSTR)"女";
//	item.iSubItem = 1;
//	m_cListCtrl.SetItem(&item);
//
//	item.pszText = (LPSTR)"兵庫県芦屋市";
//	item.iSubItem = 2;
//	m_cListCtrl.SetItem(&item);
//
//	item.pszText = (LPSTR)"太田 みく";
//	item.iItem = 2;
//	item.iSubItem = 0;
//	m_cListCtrl.InsertItem(&item);
//
//	item.pszText = (LPSTR)"女";
//	item.iSubItem = 1;
//	m_cListCtrl.SetItem(&item);
//
//	item.pszText = (LPSTR)"東京都江戸川区";
//	item.iSubItem = 2;
//	m_cListCtrl.SetItem(&item);
//
//	return;
//}
#endif


void CFrameWnd_::OnSize(UINT nType, int cx, int cy)
{
	CFrameWnd::OnSize(nType, cx, cy);

	RECT rect;
	this->GetClientRect(&rect);
	m_cListCtrl.MoveWindow(&rect);

}


// CTestListViewに移動のため
#if 0
//void CFrameWnd_::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)
//{
//	LPNMLVCUSTOMDRAW	lpCustomDraw = NULL;
//	int					row = 0;
//	int					col = 0;
//	CString				strText = "";
//
//	lpCustomDraw = (LPNMLVCUSTOMDRAW)pNMHDR;
//	*pResult = CDRF_DODEFAULT;
//
//	// 描画ステージ?
//	switch (lpCustomDraw->nmcd.dwDrawStage) {
//	case CDDS_PREPAINT:
//		*pResult = CDRF_NOTIFYITEMDRAW;
//		break;
//	case CDDS_ITEMPREPAINT:
//		row = lpCustomDraw->nmcd.dwItemSpec;
//		col = lpCustomDraw->iSubItem;
//
//		// 性別によって、リストの背景色を変える
//		strText = m_cListCtrl.GetItemText(row, 1);
//		if (strText == "女")
//		{
//			lpCustomDraw->clrTextBk = RGB(230, 158, 216);
//			lpCustomDraw->clrText = RGB(0, 0, 0);
//		}
//		else
//		{
//			lpCustomDraw->clrTextBk = RGB(128, 209, 241);
//			lpCustomDraw->clrText = RGB(0, 0, 0);
//		}
//		*pResult = CDRF_NEWFONT;
////		*pResult = CDRF_NOTIFYSUBITEMDRAW;
//		break;
//	case (CDDS_SUBITEM | CDDS_ITEMPREPAINT):
//		row = lpCustomDraw->nmcd.dwItemSpec;
//		col = lpCustomDraw->iSubItem;
//
//		// 性別によって、リストの背景色を変える
//		strText = m_cListCtrl.GetItemText(row, 1);
//		if (strText == "女")
//		{
//			lpCustomDraw->clrTextBk = RGB(230, 158, 216);
//			lpCustomDraw->clrText = RGB(0, 0, 0);
//		}
//		else
//		{
//			lpCustomDraw->clrTextBk = RGB(128, 209, 241);
//			lpCustomDraw->clrText = RGB(0, 0, 0);
//		}
//		*pResult = CDRF_NEWFONT;
//		break;
//	default:
//		*pResult = CDRF_DODEFAULT;
//		break;
//	}
//
//	return;
//}
#endif


//---[ CWinApp_ ]--------------------------------------------
// CWinAppの派生クラスCWinApp_の定義
class CWinApp_ : public CWinApp
{
public:
	virtual BOOL InitInstance();
};


BOOL CWinApp_::InitInstance()
{
	// CFrameWnd_クラスを生成してm_pMainWindに格納
	m_pMainWnd = new CFrameWnd_();
	m_pMainWnd->ShowWindow(m_nCmdShow);
	m_pMainWnd->UpdateWindow();

	return TRUE;
}

CWinApp_		theApp;



・CTestListView.h(新規追加)
#pragma once
#include 
class CTestListView : public CListCtrl
{
	void InsertMyColumn();
	void InsertMyItem();

public:
	DECLARE_MESSAGE_MAP()
	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
	afx_msg void OnSize(UINT nType, int cx, int cy);
	afx_msg void OnNMCustomdraw(NMHDR* pNMHDR, LRESULT* pResult);
};


・CTestListView.cpp(新規追加)
#include "CTestListView.h"


BEGIN_MESSAGE_MAP(CTestListView, CListCtrl)
	ON_WM_CREATE()
	ON_WM_SIZE()
	ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, &CTestListView::OnNMCustomdraw)
END_MESSAGE_MAP()

void CTestListView::InsertMyColumn()
{
	LV_COLUMN lvcol;

	lvcol.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
	lvcol.fmt = LVCFMT_LEFT;
	lvcol.cx = 100;
	lvcol.pszText = (LPSTR)"名前";
	lvcol.iSubItem = 0;
	InsertColumn(0, &lvcol);

	lvcol.cx = 50;
	lvcol.pszText = (LPSTR)"性別";
	lvcol.iSubItem = 1;
	InsertColumn(1, &lvcol);

	lvcol.cx = 200;
	lvcol.pszText = (LPSTR)"住所";
	lvcol.iSubItem = 2;
	InsertColumn(2, &lvcol);

	return;
}


void CTestListView::InsertMyItem()
{
	LV_ITEM item;

	memset(&item, 0, sizeof(LV_ITEM));

	item.mask = LVIF_TEXT;
	item.pszText = (LPSTR)"鈴木 一郎";
	item.iItem = 0;
	item.iSubItem = 0;
	InsertItem(&item);

	item.pszText = (LPSTR)"男";
	item.iSubItem = 1;
	SetItem(&item);

	item.pszText = (LPSTR)"神奈川県鎌倉市";
	item.iSubItem = 2;
	SetItem(&item);

	item.pszText = (LPSTR)"杉山 双葉";
	item.iItem = 1;
	item.iSubItem = 0;
	InsertItem(&item);

	item.pszText = (LPSTR)"女";
	item.iSubItem = 1;
	SetItem(&item);

	item.pszText = (LPSTR)"兵庫県芦屋市";
	item.iSubItem = 2;
	SetItem(&item);

	item.pszText = (LPSTR)"太田 みく";
	item.iItem = 2;
	item.iSubItem = 0;
	InsertItem(&item);

	item.pszText = (LPSTR)"女";
	item.iSubItem = 1;
	SetItem(&item);

	item.pszText = (LPSTR)"東京都江戸川区";
	item.iSubItem = 2;
	SetItem(&item);

	return;
}


int CTestListView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CListCtrl::OnCreate(lpCreateStruct) == -1)
		return -1;

	InsertMyColumn();
	InsertMyItem();

	return 0;
}


void CTestListView::OnSize(UINT nType, int cx, int cy)
{
	CListCtrl::OnSize(nType, cx, cy);

	RECT rect;
	GetClientRect(&rect);
	MoveWindow(&rect);
}


void CTestListView::OnNMCustomdraw(NMHDR* pNMHDR, LRESULT* pResult)
{
	LPNMCUSTOMDRAW pNMCD = reinterpret_cast(pNMHDR);

	LPNMLVCUSTOMDRAW	lpCustomDraw = NULL;
	int					row = 0;
	int					col = 0;
	CString				strText = "";
	
	lpCustomDraw = (LPNMLVCUSTOMDRAW)pNMHDR;
	*pResult = CDRF_DODEFAULT;
	
	// 描画ステージ?
	switch (lpCustomDraw->nmcd.dwDrawStage) {
	case CDDS_PREPAINT:
		*pResult = CDRF_NOTIFYITEMDRAW;
		break;
	case CDDS_ITEMPREPAINT:
		row = lpCustomDraw->nmcd.dwItemSpec;
		col = lpCustomDraw->iSubItem;
	
		// 性別によって、リストの背景色を変える
		strText = GetItemText(row, 1);
		if (strText == "女")
		{
			lpCustomDraw->clrTextBk = RGB(230, 158, 216);
			lpCustomDraw->clrText = RGB(0, 0, 0);
		}
		else
		{
			lpCustomDraw->clrTextBk = RGB(128, 209, 241);
			lpCustomDraw->clrText = RGB(0, 0, 0);
		}
		*pResult = CDRF_NEWFONT;
		break;
	case (CDDS_SUBITEM | CDDS_ITEMPREPAINT):
		row = lpCustomDraw->nmcd.dwItemSpec;
		col = lpCustomDraw->iSubItem;
	
		// 性別によって、リストの背景色を変える
		strText = GetItemText(row, 1);
		if (strText == "女")
		{
			lpCustomDraw->clrTextBk = RGB(230, 158, 216);
			lpCustomDraw->clrText = RGB(0, 0, 0);
		}
		else
		{
			lpCustomDraw->clrTextBk = RGB(128, 209, 241);
			lpCustomDraw->clrText = RGB(0, 0, 0);
		}
		*pResult = CDRF_NEWFONT;
		break;
	default:
		*pResult = CDRF_DODEFAULT;
		break;
	}
	
	return;
}



MCUXpresso IDEのエディターの文字化けを直す

MCUXpresso IDEのエディター内の日本語が以下のように文字化けしているのを直す手順を記載します。
MCUXpressoIDE_MOJI_002.png

【MCUXpresso IDEのエディターの文字化けを直す手順】
1.MCUXpresso IDEのメニューバーから「Windows」-「Preferences」を選択する
2.以下の設定ダイアログが表示されたら、左側のリストから「General」-「Appearance」-「Colors and Fonts」を選択し、右側の項目から「Basic」に【Text Editor Block Selection Font】と【Text Font】という項目があるので、この項目をダブルクリックするとフォントを変更するダイアログが表示されるので、日本語が表示できるフォントに変更する
※おすすめフォント:メイリオ
MCUXpressoIDE_MOJI_001.png
         ↓
MCUXpressoIDE_MOJI_003.png

MCUXpresso IDEにてLPC-Link2を使用してデバッグできるようにする方法

MCUXpresso IDEにてLPC-Link2を使用してデバッグできるようにする方法をメモしておきます

■MCUXpresso IDEにLPC-Link2を登録する方法(※既に登録されている場合は、登録しなくてよいです)
1.PCがLPC-Link2を認識している状態で赤枠のボタンを押下すると、MCUXpressoがLPC-Link2を認識するので[OK]ボタンを押下してMCUXpresso IDEにLPC-Link2を登録する
MCUXpressoIDE_Debug_001.png
                        ↓
MCUXpressoIDE_Debug_002.png
                        ↓
MCUXpressoIDE_Debug_003.png

■MCUXpresso IDEにてLPC-Link2を使用してデバッグする方法
その1.赤枠(緑色の虫)ボタンを押下してデバッグを開始する
MCUXpressoIDE_Debug_004.png

その2.Project Explorerからデバッグしたいプロジェクト配下で右クリックしてポップアップメニューを表示させ、ポップアップメニューの「Debug As」 - 「MCUXpresso IDE LinkServer」を選択してデバッグを開始する
MCUXpressoIDE_Debug_005.png
NEXT≫
プロフィール

MIBC

Author:MIBC
ブログに掲載している配線図・プログラムを使用しても良いですが、障害が発生しても一切責任を負いません。ご了承よろしくお願いします。

■お願い■
予想を反して色々な方がこのホームページを見にこられるようになってきております。
もし参考になった記事がありましたら、拍手ボタンを押していただけるとどの様な記事が良かったかの資料となったり、今後の励みになったりします。
お手数ですが参考になった記事がありましたら、参考になった記事の一番最後にあります拍手ボタンを押していただけると助かります。よろしくお願いします。

アクセスカウンター
Revolver Map
AdMax
カテゴリ
リンク