www.pudn.com > 嵌入式linux9应用开发祥解.rar > treeview.c


#include 
#include 
#include 

#include 
#include 
#include 
#include 
#include 
#include 

#define IDC_CTRL1     100
#define IDC_CTRL2     110
#define IDC_CTRL3     120
#define IDC_CTRL4     130
#define IDC_CTRL5     140
#define IDC_CTRL6     150

static HWND hMainWnd = HWND_INVALID;

static int ControlTestWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
{
	static HWND hChildWnd1,hChildWnd2,hChildWnd3,hChildWnd4,hChildWnd5,hChildWnd6;
	static TVITEMINFO tvItemInfo;

	switch (message) {
		case MSG_CREATE:
		{
			int i = 0;
			PTVITEM ptvItem;
			hChildWnd1 = CreateWindow ("treeview", 
					"", 
					WS_VISIBLE | WS_VSCROLL | WS_HSCROLL
					| WS_BORDER | TVS_WITHICON | TVS_SORT, 
					IDC_CTRL1, 
					10, 20, 250, 150, hWnd, 0);
			hChildWnd2 = CreateWindow ("Edit",
					"Add a child to current node.",
					WS_CHILD | WS_VISIBLE | WS_BORDER,
					IDC_CTRL2,
					10, 200, 250, 25, hWnd, 0);
			hChildWnd3 = CreateWindow ("Edit",
					"Find a node in treeview.",
					WS_CHILD | WS_VISIBLE | WS_BORDER,
					IDC_CTRL3,
					10, 250, 250, 25, hWnd, 0);
			hChildWnd4 = CreateWindow ("button",
					"Add",
					WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON,
					IDC_CTRL4,
					270, 200, 60, 25, hWnd, 0);
			hChildWnd5 = CreateWindow ("button",
					"Del",
					WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
					IDC_CTRL5,
					270, 300, 60, 25, hWnd, 0);
			hChildWnd6 = CreateWindow ("button",
					"Find",
					WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
					IDC_CTRL6,
					270, 250, 60, 25, hWnd, 0);
			
			tvItemInfo.text = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
			SendMessage (hChildWnd1, TVM_ADDITEM, 0, (LPARAM) &tvItemInfo);
			
			tvItemInfo.text = "b";
			for (i = 0; i <= 10; i++)
				SendMessage (hChildWnd1, TVM_ADDITEM, 0, (LPARAM) &tvItemInfo);
			
			tvItemInfo.text = "ccccccccccc";
			SendMessage (hChildWnd1, TVM_ADDITEM, 0, (LPARAM) &tvItemInfo);
			tvItemInfo.text = "a.a";
			ptvItem = (PTVITEM) SendMessage (hChildWnd1, TVM_GETROOT, 0, 0);
			SendMessage (hChildWnd1, TVM_ADDITEM, (WPARAM) ptvItem->child, (LPARAM) &tvItemInfo);
			tvItemInfo.text = "a.b";
			SendMessage (hChildWnd1, TVM_ADDITEM, (WPARAM) ptvItem->child, (LPARAM) &tvItemInfo);
		}
		break;

		case MSG_COMMAND:
		{
			int id   = LOWORD(wParam);
//			int code = HIWORD(wParam);
			char buffer[255];
			switch (id)
			{
				case IDC_CTRL4:
					SendMessage (hChildWnd2, MSG_GETTEXT, 99, (LPARAM) buffer);
					if (buffer[0] != '\0') {
						tvItemInfo.text = buffer;
						SendMessage (hChildWnd1, TVM_ADDITEM, 0, (LPARAM) &tvItemInfo);
					}
				break;
            			
				case IDC_CTRL5:
					SendMessage (hChildWnd1, TVM_DELTREE, 0, 0);
				break;
				
				case IDC_CTRL6:
				{
					TVITEM* pp = NULL;
					SendMessage (hChildWnd3, MSG_GETTEXT, 99, (LPARAM) buffer);
					if (buffer[0] != '\0') {
						SendMessage (hChildWnd1, TVM_FINDITEM, 
								(WPARAM) &pp, (LPARAM) buffer);
					}
				}
				break;
				
				default:
				break;
			}
		}
		break;
        
		case MSG_CLOSE:
			DestroyWindow (hChildWnd1);
			DestroyWindow (hChildWnd2);
			DestroyWindow (hChildWnd3);
			DestroyWindow (hChildWnd4);
			DestroyWindow (hChildWnd5);
			DestroyWindow (hChildWnd6);
			DestroyMainWindow (hWnd);
            MainWindowCleanup (hWnd);
            hMainWnd = HWND_INVALID;
			return 0;
	}

	return DefaultMainWinProc(hWnd, message, wParam, lParam);
}

static void InitCreateInfo(PMAINWINCREATE pCreateInfo)
{
	pCreateInfo->dwStyle = WS_CAPTION | WS_BORDER | WS_MINIMIZEBOX 
				| WS_MAXIMIZEBOX
				| WS_VISIBLE;
	pCreateInfo->dwExStyle = WS_EX_IMECOMPOSE;
	pCreateInfo->spCaption = "Treeview control" ;
	pCreateInfo->hMenu = 0;
	pCreateInfo->hCursor = GetSystemCursor(0);
	pCreateInfo->hIcon = 0;
	pCreateInfo->MainWindowProc = ControlTestWinProc;
	pCreateInfo->lx = 0; 
	pCreateInfo->ty = 0;
	pCreateInfo->rx = 400;
	pCreateInfo->by = 300;
    pCreateInfo->iBkColor = GetWindowElementColor (BKC_CONTROL_DEF);
	pCreateInfo->dwAddData = 0;
	pCreateInfo->hHosting = HWND_DESKTOP;
}

void treeview_demo (HWND hwnd)
{
	MAINWINCREATE CreateInfo;

    if (hMainWnd != HWND_INVALID) {
        ShowWindow (hMainWnd, SW_SHOWNORMAL);
        return;
    }

	InitCreateInfo(&CreateInfo);
    CreateInfo.hHosting = hwnd;

	hMainWnd = CreateMainWindow(&CreateInfo);

}