⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 acdsmpl.c

📁 TAPI ACD Samples
💻 C
📖 第 1 页 / 共 5 页
字号:
        }

        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 + -