📄 acdsmpl.c
字号:
}
SetWindowPlacement(g.hMainWnd, &pwp);
}
RegCloseKey( hKey );
}
//////////////////////////////////////////////////////////////////////////////
//
// MySaveWindow() - save the current window placement and bar
//
//////////////////////////////////////////////////////////////////////////////
void MySaveWindow(HWND hWnd)
{
WINDOWPLACEMENT pwp;
HKEY hKey;
DWORD dwDisposition;
pwp.length = sizeof(WINDOWPLACEMENT);
// get and save
GetWindowPlacement(hWnd, &pwp);
RegCreateKeyEx(HKEY_CURRENT_USER,
gszACDSampleKey,
0,
TEXT(""),
REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS,
0,
&hKey,
&dwDisposition);
RegSetValueEx(hKey,
gszPlacementValue,
0,
REG_BINARY,
(LPBYTE)&pwp,
sizeof(WINDOWPLACEMENT));
RegSetValueEx(hKey,
gszBarLocation,
0,
REG_DWORD,
(LPBYTE)&g.dwBarLocation,
sizeof(DWORD));
RegCloseKey( hKey );
}
//////////////////////////////////////////////////////////////////////////////
//
// AddItemToTree
//
// add a new leaf to the tree
//
//////////////////////////////////////////////////////////////////////////////
HTREEITEM AddItemToTree(HTREEITEM hParent,
LPTSTR lpszName,
LPARAM lParam,
HTREEITEM * phItem)
{
TV_ITEM tvi;
TV_INSERTSTRUCT tvins;
HTREEITEM hti;
tvi.mask = TVIF_TEXT | TVIF_PARAM;
// Set the text of the item.
tvi.pszText = lpszName;
tvi.cchTextMax = lstrlen(lpszName) * sizeof(TCHAR);
// Save the pointer to the buffer
tvi.lParam = lParam;
tvins.item = tvi;
tvins.hInsertAfter = TVI_SORT;
// Set the parent item
tvins.hParent = hParent;
// Add the item to the tree-view control.
hti = (HTREEITEM) SendMessage(g.hTreeWnd,
TVM_INSERTITEM,
0,
(LPARAM) (LPTV_INSERTSTRUCT) &tvins);
// save hitem
if (phItem)
{
*phItem = hti;
}
// select the item so it has focus
TreeView_Select(g.hTreeWnd,
hti,
TVGN_CARET);
return hti;
}
//////////////////////////////////////////////////////////////////////////////
//
// DoPopupMenu(HTREEITEM hItem,
// POINT pt)
//
// hItem - item to create menu for
// pt - location of mouse so we can create menu where it is
//
// creates a popup menu, depending on what kind of item is selected
//
//////////////////////////////////////////////////////////////////////////////
BOOL DoPopupMenu(HTREEITEM hItem, POINT pt)
{
HMENU hMenu;
TV_ITEM tvi;
TCHAR szNewGroup[] = TEXT("&New Group...");
TCHAR szNewAgent[] = TEXT("New &Agent...");
TCHAR szAddAgent[] = TEXT("A&dd Agent...");
TCHAR szGroupProperties[] = TEXT("&Group Properties...");
TCHAR szAgentStatus[] = TEXT("Agent Status...");
TCHAR szAddGroup[] = TEXT("Add Group...");
TCHAR szAgentProperties[] = TEXT("Agent Properties...");
TCHAR szGroupDelete[] = TEXT("Group Delete");
TCHAR szAgentDelete[] = TEXT("Agent Delete");
TCHAR szSignIn[] = TEXT("Agent Sign In");
TCHAR szSignOut[] = TEXT("Agent Sign Out");
// get the selected item
g.hTreeItemWithMenu = hItem;
// create the menu
hMenu = CreatePopupMenu();
// get the lParam, which is a pointer to the item
tvi.mask = TVIF_HANDLE | TVIF_PARAM;
tvi.hItem = hItem;
TreeView_GetItem(g.hTreeWnd,
&tvi);
if (!tvi.lParam)
{
return TRUE;
}
switch (((PGROUP)tvi.lParam)->dwKey)
{
// root item
case GROUPROOTKEY:
AppendMenu(hMenu,
MF_ENABLED | MF_STRING,
IDM_NEWGROUP,
szNewGroup);
break;
// root item
case AGENTROOTKEY:
AppendMenu(hMenu,
MF_ENABLED | MF_STRING,
IDM_NEWAGENT,
szNewAgent);
break;
// group leaf
case GROUPKEY:
AppendMenu(hMenu,
MF_ENABLED | MF_STRING,
(UINT)IDM_GROUPADDTOLIST,
szAddAgent);
AppendMenu(hMenu,
MF_ENABLED | MF_STRING,
(UINT)IDM_GROUPAGENTSTATUS,
szAgentStatus);
AppendMenu(hMenu,
MF_ENABLED | MF_STRING,
IDM_GROUPPROPERTIES,
szGroupProperties);
AppendMenu(hMenu,
MF_ENABLED | MF_STRING,
IDM_GROUPDELETE,
szGroupDelete);
break;
// agent leaf
case AGENTKEY:
AppendMenu(hMenu,
MF_ENABLED | MF_STRING,
(UINT)IDM_AGENTADDTOLIST,
szAddGroup);
AppendMenu(hMenu,
MF_ENABLED | MF_STRING,
IDM_AGENTPROPERTIES,
szAgentProperties);
AppendMenu(hMenu,
MF_ENABLED | MF_STRING,
IDM_AGENTDELETE,
szAgentDelete);
break;
default:
break;
}
// actually show menu
TrackPopupMenu(hMenu,
TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_RIGHTBUTTON,
pt.x,
pt.y,
0,
g.hMainWnd,
NULL);
return TRUE;
}
///////////////////////////////////////////////////////////////////////////////
//
// LRESULT DoCommand(WPARAM wParam, LPARAM lParam)
// handle WM_COMMAND messages for MainDlgProc
//
///////////////////////////////////////////////////////////////////////////////
LRESULT DoCommand(WPARAM wParam, LPARAM lParam)
{
switch (LOWORD(wParam))
{
// New - create a new tree, so just init
// the items and return
case ID_FILE_NEW:
DoGroupView();
return 1;
// Open - read in a file
case ID_FILE_OPEN:
ReadInFile();
return 1;
case ID_FILE_EXIT:
// save the current window location
WriteToDisk();
CleanUp();
MySaveWindow(g.hMainWnd);
PostQuitMessage(0);
return 1;
// new group
case ID_EDIT_ADDGROUP:
case IDM_NEWGROUP:
DialogBox(g.hInstance,
MAKEINTRESOURCE(IDD_ADD),
g.hTreeWnd,
AddGroupDlgProc);
return 1;
// new agent
case ID_EDIT_ADDAGENT:
case IDM_NEWAGENT:
DialogBox(g.hInstance,
MAKEINTRESOURCE(IDD_ADDAGENT),
g.hTreeWnd,
AddAgentDlgProc);
return 1;
// properties
case IDM_GROUPPROPERTIES:
DialogBox(g.hInstance,
MAKEINTRESOURCE(IDD_ADD),
g.hMainWnd,
ChangeGroupDlgProc);
return 1;
// properties
case IDM_AGENTPROPERTIES:
DialogBox(g.hInstance,
MAKEINTRESOURCE(IDD_ADDAGENT),
g.hMainWnd,
ChangeAgentDlgProc);
return 1;
// delete
case IDM_GROUPDELETE:
case IDM_AGENTDELETE:
{
DeleteLeafAndStruct(g.hTreeItemWithMenu);
return 1;
}
// add to list
case IDM_GROUPADDTOLIST:
DialogBoxParam(g.hInstance,
MAKEINTRESOURCE(IDD_ADDTOLIST),
g.hMainWnd,
GroupAddToListProc,
TRUE);
return 1;
// add to list
case IDM_AGENTADDTOLIST:
DialogBoxParam(g.hInstance,
MAKEINTRESOURCE(IDD_ADDTOLIST),
g.hMainWnd,
AgentAddToListProc,
FALSE);
return 1;
case ID_VIEW_GROUP:
DoGroupView();
return 1;
case ID_VIEW_AGENT:
DoAgentView();
return 1;
default:
break;
}
return 0;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
//
// AddGroupDlgProc - Window proc for the add agent/group dialog box
//
/////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL CALLBACK AddGroupDlgProc(HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
switch (uMsg)
{
case WM_INITDIALOG:
// set text appropriately
SetWindowText(hWnd,
TEXT("Add Group"));
BuildLineList(GetDlgItem(hWnd,
IDC_LINECOMBO),
0);
BuildAddressList(GetDlgItem(hWnd,
IDC_ADDRESSCOMBO),
hWnd,
0);
// set focus on first control
SetFocus(GetDlgItem(hWnd,
IDC_NAME));
return 0;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDC_LINECOMBO:
{
if (HIWORD(wParam) == CBN_SELENDOK)
{
// need to redo addresses
BuildAddressList(GetDlgItem(hWnd,
IDC_ADDRESSCOMBO),
hWnd,
0);
return 1;
}
return 0;
}
case IDOK:
{
TCHAR szName[128];
PGROUP pGroup;
DWORD dwLine, dwAddress;
int item;
// get info
SendDlgItemMessage(hWnd,
IDC_NAME,
WM_GETTEXT,
128,
(LPARAM)szName);
item = SendDlgItemMessage(hWnd,
IDC_LINECOMBO,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -