mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
356 lines
11 KiB
356 lines
11 KiB
#include "stdafx.h"
|
|
#include "resource.h"
|
|
|
|
//-------------------------------------------------------------------------//
|
|
// impl for all Samples pages
|
|
//-------------------------------------------------------------------------//
|
|
|
|
void Pickers_Init(HWND hwndPage);
|
|
void Movers_Init(HWND hwndPage);
|
|
void Lists_Init(HWND hwndPage);
|
|
void ListView_Init(HWND hwndPage, int iControlId);
|
|
void TreeView_Init(HWND hwndPage, int iControlId);
|
|
|
|
//---- init routines for "bars" dialog ----
|
|
void Header_Init(HWND hwndPage, int iControlId);
|
|
void Status_Init(HWND hwndPage, int iControlId);
|
|
void Toolbar_Init(HWND hwndPage, int iControlId, int iMaxButtons);
|
|
void Rebar_Init(HWND hwndPage, int iControlId);
|
|
//-------------------------------------------------------------------------//
|
|
// shared sample data
|
|
|
|
static WCHAR *Names[] = {L"One", L"Two", L"Three", L"Four", L"Five", L"Six",
|
|
L"Seven", L"Eight", L"Nine", L"Ten", L"Eleven", L"Twelve",
|
|
L"Thirteen", L"Fourteen", L"Fifteen", L"Sixteen"};
|
|
|
|
static WCHAR *Buttons[] = {L"New", L"Open", L"Save", L"Cut", L"Copy", L"Delete",
|
|
L"Undo", L"Redo", L"Print", L"Help\0"};
|
|
|
|
static int ButtonIndexes[] = {STD_FILENEW, STD_FILEOPEN, STD_FILESAVE,
|
|
STD_CUT, STD_COPY, STD_DELETE, STD_UNDO, STD_REDOW, STD_PRINT, STD_HELP};
|
|
|
|
static WCHAR *Columns[] = {L"Name", L"Phone", L"City", L"State"};
|
|
|
|
static WCHAR *Col1Items[] = {L"Chris", L"Lou", L"Richard", L"Mark", L"Roland", L"Paul",
|
|
L"Scott", L"Aaron", L"Greg", L"Ken"};
|
|
|
|
static WCHAR *Col2Items[] = {L"555-1212", L"567-3434", L"656-4432", L"343-7788", L"706-0225", L"828-3043",
|
|
L"706-4433", L"882-8080", L"334-3434", L"333-5430"};
|
|
|
|
static WCHAR *Col3Items[] = {L"Seattle", L"Redmond", L"Bellevue", L"Seattle", L"Woodinville", L"Kirkland",
|
|
L"Kirkland", L"Woodinville", L"Redmond", L"Redmond"};
|
|
|
|
void InitControls(HWND hwndPage)
|
|
{
|
|
Pickers_Init(hwndPage);
|
|
Movers_Init(hwndPage);
|
|
Lists_Init(hwndPage);
|
|
ListView_Init(hwndPage, IDC_LIST1);
|
|
ListView_Init(hwndPage, IDC_LIST2);
|
|
TreeView_Init(hwndPage, IDC_TREE1);
|
|
TreeView_Init(hwndPage, IDC_TREE2);
|
|
Header_Init(hwndPage, IDC_HEADER1);
|
|
Status_Init(hwndPage, IDC_STATUS1);
|
|
//Toolbar_Init(hwndPage, IDC_TOOLBAR1);
|
|
Rebar_Init(hwndPage, IDC_REBAR1);
|
|
}
|
|
|
|
//-------------------------------------------------------------------------//
|
|
void Pickers_Init(HWND hwndPage)
|
|
{
|
|
HWND hwnd1 = GetDlgItem(hwndPage, IDC_TAB1);
|
|
HWND hwnd2 = GetDlgItem(hwndPage, IDC_TAB2);
|
|
TCITEM item;
|
|
item.mask = TCIF_TEXT;
|
|
|
|
for (int i=0; i < 4; i++)
|
|
{
|
|
item.pszText = Names[i];
|
|
SendMessage(hwnd1, TCM_INSERTITEM, i, (LPARAM)&item);
|
|
SendMessage(hwnd2, TCM_INSERTITEM, i, (LPARAM)&item);
|
|
}
|
|
}
|
|
|
|
//-------------------------------------------------------------------------//
|
|
void Movers_Init(HWND hwndPage)
|
|
{
|
|
HWND hwnd1 = GetDlgItem(hwndPage, IDC_PROGRESS1);
|
|
HWND hwnd2 = GetDlgItem(hwndPage, IDC_PROGRESS2);
|
|
|
|
SendMessage(hwnd1, PBM_SETRANGE, 0, MAKELPARAM(0, 100));
|
|
SendMessage(hwnd2, PBM_SETRANGE, 0, MAKELPARAM(0, 100));
|
|
|
|
SendMessage(hwnd1, PBM_SETPOS, 33, 0);
|
|
SendMessage(hwnd2, PBM_SETPOS, 33, 0);
|
|
}
|
|
//-------------------------------------------------------------------------//
|
|
void Lists_Init(HWND hwndPage)
|
|
{
|
|
HWND hwnds[7];
|
|
|
|
hwnds[0] = GetDlgItem(hwndPage, IDC_LIST1);
|
|
hwnds[1] = GetDlgItem(hwndPage, IDC_COMBO1);
|
|
hwnds[2] = GetDlgItem(hwndPage, IDC_COMBO2);
|
|
hwnds[3] = GetDlgItem(hwndPage, IDC_COMBO3);
|
|
hwnds[4] = GetDlgItem(hwndPage, IDC_COMBOBOXEX1);
|
|
hwnds[5] = GetDlgItem(hwndPage, IDC_COMBOBOXEX2);
|
|
hwnds[6] = GetDlgItem(hwndPage, IDC_COMBOBOXEX3);
|
|
|
|
//---- listbox ----
|
|
SendMessage(hwnds[0], LB_RESETCONTENT, 0, 0);
|
|
for (int j=0; j < ARRAYSIZE(Names); j++)
|
|
SendMessage(hwnds[0], LB_ADDSTRING, 0, (LPARAM)Names[j]);
|
|
SendMessage(hwnds[0], LB_SETCURSEL, 0, 0);
|
|
|
|
//---- comboboxes ----
|
|
for (int i=1; i < 4; i++)
|
|
{
|
|
SendMessage(hwnds[i], CB_RESETCONTENT, 0, 0);
|
|
|
|
for (int j=0; j < ARRAYSIZE(Names); j++)
|
|
SendMessage(hwnds[i], CB_ADDSTRING, 0, (LPARAM)Names[j]);
|
|
|
|
SendMessage(hwnds[i], CB_SETCURSEL, 0, 0);
|
|
}
|
|
|
|
//---- combo EX boxes ----
|
|
COMBOBOXEXITEM exitem;
|
|
exitem.mask = CBEIF_TEXT ;
|
|
|
|
for (i=4; i < 7; i++)
|
|
{
|
|
SendMessage(hwnds[i], CB_RESETCONTENT, 0, 0);
|
|
|
|
for (int j=0; j < ARRAYSIZE(Names); j++)
|
|
{
|
|
exitem.iItem = j;
|
|
exitem.pszText = Names[j];
|
|
SendMessage(hwnds[i], CBEM_INSERTITEM, 0, (LPARAM)&exitem);
|
|
}
|
|
|
|
SendMessage(hwnds[i], CB_SETCURSEL, 0, 0);
|
|
}
|
|
|
|
}
|
|
//-------------------------------------------------------------------------//
|
|
void ListView_Init(HWND hwndPage, int iControlId)
|
|
{
|
|
HWND hwnd = GetDlgItem(hwndPage, iControlId);
|
|
if (! hwnd)
|
|
return;
|
|
|
|
//---- initialize the colums ----
|
|
LVCOLUMN lvc;
|
|
memset(&lvc, 0, sizeof(lvc));
|
|
|
|
lvc.mask = LVCF_TEXT | LVCF_SUBITEM | LVCF_FMT | LVCF_WIDTH;
|
|
lvc.fmt = LVCFMT_LEFT;
|
|
lvc.cx = 100;
|
|
|
|
// Add the columns.
|
|
for (int c=0; c < ARRAYSIZE(Columns); c++)
|
|
{
|
|
lvc.iSubItem = c;
|
|
lvc.pszText = Columns[c];
|
|
SendMessage(hwnd, LVM_INSERTCOLUMN, c, (LPARAM)&lvc);
|
|
}
|
|
|
|
//---- initialize the items ----
|
|
LVITEM item;
|
|
memset(&item, 0, sizeof(item));
|
|
item.mask = LVIF_TEXT;
|
|
|
|
//---- add the items ----
|
|
for (int i=0; i < ARRAYSIZE(Col1Items); i++)
|
|
{
|
|
item.pszText = Col1Items[i];
|
|
item.iItem = i;
|
|
item.iSubItem = 0;
|
|
SendMessage(hwnd, LVM_INSERTITEM, 0, (LPARAM)&item);
|
|
|
|
item.iSubItem = 1;
|
|
item.pszText = Col2Items[i];
|
|
SendMessage(hwnd, LVM_SETITEM, 0, (LPARAM)&item);
|
|
|
|
item.iSubItem = 2;
|
|
item.pszText = Col3Items[i];
|
|
SendMessage(hwnd, LVM_SETITEM, 0, (LPARAM)&item);
|
|
}
|
|
}
|
|
//-------------------------------------------------------------------------//
|
|
void TreeView_Init(HWND hwndPage, int iControlId)
|
|
{
|
|
HWND hwnd = GetDlgItem(hwndPage, iControlId);
|
|
if (! hwnd)
|
|
return;
|
|
|
|
//---- initialize the item ----
|
|
TVINSERTSTRUCT tvs;
|
|
memset(&tvs, 0, sizeof(tvs));
|
|
tvs.itemex.mask = TVIF_TEXT;
|
|
tvs.hInsertAfter = TVI_LAST;
|
|
|
|
tvs.itemex.pszText = L"Root";
|
|
HTREEITEM hRoot = (HTREEITEM) SendMessage(hwnd, TVM_INSERTITEM, 0, (LPARAM)&tvs);
|
|
|
|
//---- add the items ----
|
|
for (int i=0; i < ARRAYSIZE(Col1Items); i++)
|
|
{
|
|
tvs.itemex.pszText = Col1Items[i];
|
|
tvs.hParent = hRoot;
|
|
HTREEITEM hItem = (HTREEITEM) SendMessage(hwnd, TVM_INSERTITEM, 0, (LPARAM)&tvs);
|
|
|
|
if (hItem)
|
|
{
|
|
TVINSERTSTRUCT tvchild;
|
|
memset(&tvchild, 0, sizeof(tvchild));
|
|
tvchild.itemex.mask = TVIF_TEXT;
|
|
tvchild.hInsertAfter = TVI_LAST;
|
|
tvchild.hParent = hItem;
|
|
|
|
tvchild.itemex.pszText = Col2Items[i];
|
|
SendMessage(hwnd, TVM_INSERTITEM, 0, (LPARAM)&tvchild);
|
|
|
|
tvchild.itemex.pszText = Col3Items[i];
|
|
SendMessage(hwnd, TVM_INSERTITEM, 0, (LPARAM)&tvchild);
|
|
}
|
|
}
|
|
}
|
|
//-------------------------------------------------------------------------//
|
|
void Header_Init(HWND hwndPage, int iControlId)
|
|
{
|
|
HWND hwnd = GetDlgItem(hwndPage, iControlId);
|
|
if (! hwnd)
|
|
return;
|
|
|
|
//---- initialize the item ----
|
|
HDITEM item;
|
|
memset(&item, 0, sizeof(item));
|
|
item.mask = HDI_WIDTH | HDI_TEXT;
|
|
item.cxy = 60;
|
|
|
|
//---- add the items ----
|
|
for (int i=0; i < ARRAYSIZE(Columns); i++)
|
|
{
|
|
item.pszText = Columns[i];
|
|
HTREEITEM hItem = (HTREEITEM) SendMessage(hwnd, HDM_INSERTITEM, i, (LPARAM)&item);
|
|
}
|
|
}
|
|
|
|
//-------------------------------------------------------------------------//
|
|
void Status_Init(HWND hwndPage, int iControlId)
|
|
{
|
|
HWND hwnd = GetDlgItem(hwndPage, iControlId);
|
|
if (! hwnd)
|
|
return;
|
|
|
|
//---- setup the different sections ----
|
|
int Widths[] = {200, 400, 600};
|
|
SendMessage(hwnd, SB_SETPARTS, ARRAYSIZE(Widths), (LPARAM)Widths);
|
|
|
|
//---- write some text ----
|
|
SendMessage(hwnd, SB_SETTEXT, 0, (LPARAM)L"First Section");
|
|
SendMessage(hwnd, SB_SETTEXT, 1, (LPARAM)L"Second Section");
|
|
SendMessage(hwnd, SB_SETTEXT, 2, (LPARAM)L"Third Section");
|
|
}
|
|
//-------------------------------------------------------------------------//
|
|
void Toolbar_Init(HWND hwndPage, int iControlId, int iMaxButtons)
|
|
{
|
|
HWND hwnd = GetDlgItem(hwndPage, iControlId);
|
|
if (! hwnd)
|
|
return;
|
|
|
|
//---- send require toolbar init msg ----
|
|
SendMessage(hwnd, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);
|
|
|
|
//---- setup the bitmap images for buttons ----
|
|
TBADDBITMAP abm = {HINST_COMMCTRL, IDB_STD_LARGE_COLOR};
|
|
SendMessage(hwnd, TB_ADDBITMAP, 15, (LPARAM)&abm);
|
|
|
|
TBBUTTON button;
|
|
memset(&button, 0, sizeof(button));
|
|
button.fsState = TBSTATE_ENABLED;
|
|
|
|
//int index = (int)SendMessage(hwnd, TB_ADDSTRING, NULL, (LPARAM)Buttons);
|
|
|
|
int cnt = min(iMaxButtons, ARRAYSIZE(Buttons));
|
|
|
|
for (int i=0; i < cnt; i++)
|
|
{
|
|
button.fsStyle = TBSTYLE_BUTTON;
|
|
button.iBitmap = ButtonIndexes[i];
|
|
button.idCommand = i;
|
|
button.iString = 0; // index + i;
|
|
SendMessage(hwnd, TB_ADDBUTTONS, 1, LPARAM(&button));
|
|
|
|
if ((i == 2) || (i == 5) || (i == 7) || (i == 9))
|
|
{
|
|
button.fsStyle = BTNS_SEP;
|
|
SendMessage(hwnd, TB_ADDBUTTONS, 1, LPARAM(&button));
|
|
}
|
|
}
|
|
|
|
SendMessage(hwnd, TB_AUTOSIZE, 0, 0);
|
|
ShowWindow(hwnd, SW_SHOW);
|
|
}
|
|
//-------------------------------------------------------------------------//
|
|
void Rebar_Init(HWND hwndPage, int iControlId)
|
|
{
|
|
HWND hwndRB = GetDlgItem(hwndPage, iControlId);
|
|
if (! hwndRB)
|
|
return;
|
|
|
|
//---- initialize the rebar ----
|
|
REBARINFO rbi;
|
|
rbi.cbSize = sizeof(rbi);
|
|
rbi.fMask = 0;
|
|
rbi.himl = (HIMAGELIST)NULL;
|
|
SendMessage(hwndRB, RB_SETBARINFO, 0, (LPARAM)&rbi);
|
|
|
|
//---- initialize the band ----
|
|
REBARBANDINFO rbBand;
|
|
rbBand.cbSize = sizeof(REBARBANDINFO);
|
|
rbBand.fMask = RBBIM_TEXT | RBBIM_STYLE | RBBIM_CHILD | RBBIM_CHILDSIZE | RBBIM_SIZE;
|
|
rbBand.fStyle = RBBS_GRIPPERALWAYS | RBBS_BREAK;
|
|
// rbBand.hbmBack= LoadBitmap(_Module.GetModuleInstance(), MAKEINTRESOURCE(IDB_BACKGROUND));
|
|
|
|
RECT rc;
|
|
HWND hwndCB, hwndTB;
|
|
|
|
// Create the combo box control to be added.
|
|
hwndCB = CreateWindowEx(0, L"Combobox", L"Combo Text", WS_VISIBLE | WS_CHILD | WS_BORDER,
|
|
0, 0, 100, 30, hwndRB, (HMENU)51, _Module.GetModuleInstance(), 0);
|
|
|
|
// Set values unique to the band with the combo box.
|
|
GetWindowRect(hwndCB, &rc);
|
|
rbBand.lpText = L"Combo Box";
|
|
rbBand.hwndChild = hwndCB;
|
|
rbBand.cxMinChild = 20;
|
|
rbBand.cyMinChild = HEIGHT(rc);
|
|
rbBand.cx = 120; // WIDTH(rc) + 20;
|
|
|
|
// Add the band that has the combo box.
|
|
LRESULT val = SendMessage(hwndRB, RB_INSERTBAND, (WPARAM)-1, (LPARAM)&rbBand);
|
|
|
|
#if 1
|
|
// Create the toolbar control to be added.
|
|
hwndTB = CreateWindowEx(0, TOOLBARCLASSNAME, L"", WS_VISIBLE | WS_CHILD | WS_BORDER,
|
|
0, 0, 500, 30, hwndRB, (HMENU)52, _Module.GetModuleInstance(), 0);
|
|
Toolbar_Init(hwndRB, 52, 3);
|
|
|
|
// Set values unique to the band with the toolbar.
|
|
rbBand.lpText = L"Tool Bar";
|
|
rbBand.hwndChild = hwndTB;
|
|
rbBand.cxMinChild = 20;
|
|
|
|
DWORD dwBtnSize = (DWORD) SendMessage(hwndTB, TB_GETBUTTONSIZE, 0,0);
|
|
rbBand.cyMinChild = HIWORD(dwBtnSize);
|
|
|
|
GetWindowRect(hwndTB, &rc);
|
|
rbBand.cx = 450; // WIDTH(rc) + 20;
|
|
|
|
// Add the band that has the toolbar.
|
|
val = SendMessage(hwndRB, RB_INSERTBAND, (WPARAM)-1, (LPARAM)&rbBand);
|
|
#endif
|
|
}
|
|
|