《远控编程笔记》 第三天

妈妈正在做年夜饭,坐等好吃的上桌



第六课、客户端界面的设计和编写

1.6 添加菜单消息响应,从列表中删除条目

1.添加菜单消息响应的函数(在Dlg类上右键属性,右边的事件):

         终端管理     进程管理    窗口管理    桌面管理     文件管理    语音管理     视频管理   服务管理     注册表管理 断开连接

2.删除列表中的条目(断开连接函数的处理函数):

      用到的CListCtrl  成员函数

     (1)DeleteItem

                    BOOL DeleteItem(

                                 int nItem              //列表的索引  从0开始

                   );

     (2)GetSelectionMark

                       int GetSelectionMark( );        //得到用户选中的条目索引

     (3)  GetItemText 

                           CString GetItemText(

                                             int nItem,          //哪一行

                                             int nSubItem        //行中的那个子列

                           ) const;

3.添加下线菜单  断开连接   ID:   IDM_ONLINE_DELETE

4.在断开连接选项的响应函数添加代码:

void CVeryEvilDlg::OnOnlineDelete()

{//断开连接

// TODO: 在此添加命令处理程序代码

CString strIP;

int iSelect=m_CList_Online.GetSelectionMark( );//得到用户当前选定的条目索引

strIP=m_CList_Online.GetItemText(iSelect,ONLINELIST_IP);//得到选定行的IP列的内容

m_CList_Online.DeleteItem(iSelect);

strIP+="   主机断开连接";

ShowMessage(true,strIP);

}


第六课、客户端界面的设计和编写

1.7 为对话框添加菜单栏并添加事件响应

1.创建菜单的资源  ID:  IDR_MENU_MAIN

2.添加菜单: 文件--退出(IDM_MAIN_CLOSE)

            设置--参数设置(IDM_MAIN_SET)----生成服务端(IDM_MAIN_BUILD)

            帮助--关于(IDM_MAIN_ABOUT)

3.为对话框添加代码,显示菜单:

       (1) 认识几个API函数:

              HMENU LoadMenu(                    //载入菜单 

                  HINSTANCE hInstance,          //资源所在文件模块的句柄标识 (DLL文件时用到此参数,EXE文件用不到)

                   LPCTSTR lpMenuName           //资源ID

               );

                BOOL SetMenu(                  //为窗口设置菜单

                  HWND hWnd,                 //要设置菜单的窗口句柄

                  HMENU hMenu                //菜单标识

                );

               BOOL DrawMenuBar(          //显示菜单

                       HWND hWnd          //要显示菜单的窗口句柄

                );

        

      (2)在OnInitialDlg()中添加菜单的代码 

        HMENU hmenu;

hmenu=LoadMenu(NULL,MAKEINTRESOURCE(IDR_MENU_MAIN));  //载入菜单资源

::SetMenu(this->GetSafeHwnd(),hmenu);                  //为窗口设置菜单

::DrawMenuBar(this->GetSafeHwnd());                    //显示菜单

3.为每一个菜单添加事件响应

       

4.添加消息响应函数代码:

    退出菜单代码:

             BOOL PostMessage(          HWND hWnd,             //标识向那个窗口发送消息

                                        UINT Msg,              //消息内容

                                        WPARAM wParam,         //消息参数

                                         LPARAM lParam          //消息参数

            );

             PostMessage(WM_CLOSE,0,0);

    关于菜单代码:

           CAboutDlg dlgAbout;

           dlgAbout.DoModal();

    其他代码用MessageBox代替

注意:在编译Edit控件的文字时可以在字符串中用\r\n来达到换行的目的


第七课、客户端界面的设计和编写

1.8 为对话框添加状态条并在态条上显示文字

1.创建字符串资源  ID:  IDR_STATUSBAR_STRING   标题 : 就绪

2.添加状态条变量:

Protected:

        CStatusBar  m_wndStatusBar;              //状态条

3.查看MSDN:

        CStatusBar  SetIndicators      

                    BOOL SetIndicators(           //在状态条中加入对应字符串ID

                          const UINT* lpIDArray,   //字符串ID         

                                   int nIDCount     //个数

                    );

                    

                    void SetPaneInfo(         //设置状态条的显示状态

                                  int nIndex,     //状态条的索引

                                  UINT& nID,      //状态条的字符ID

                                  UINT& nStyle,    //状态条的样式

                                   int& cxWidth    //状态条的宽度

                    ) const;

 

4.写入代码创建状态条的代码:

(1)  创建字符ID的数组

               static UINT indicators[] =

               {

           IDR_STATUSBAR_STRING

                   };

(2)添加CreatStatusBar自定义函数用于创建我们的状态栏:

void CVeryEvilDlg::CreatStatusBar(void)

{//参见MSDN样列代码

if (!m_wndStatusBar.Create(this) ||

!m_wndStatusBar.SetIndicators(indicators,

sizeof(indicators)/sizeof(UINT)))                    //创建状态条并设置字符资源的ID

{

TRACE0("Failed to create status bar\n");

return ;      // fail to create

}

CRect rc;

::GetWindowRect(m_wndStatusBar.m_hWnd,rc);             

m_wndStatusBar.MoveWindow(rc);                              //移动状态条到指定位置

}

然后在OnInitalDialog()函数中调用该函数

(3)在OnSize 中添加代码:

              if(m_wndStatusBar.m_hWnd!=NULL){    //当对话框大小改变时 状态条大小也随之改变

CRect rc;

rc.top=cy-20;

rc.left=0;

rc.right=cx;

rc.bottom=cy;

m_wndStatusBar.MoveWindow(rc);

m_wndStatusBar.SetPaneInfo(0, m_wndStatusBar.GetItemID(0),SBPS_POPOUT, cx-10);

     }

          

5.写入状态上显示文字的代码:

            

           .h中添加变量 

protected:

      int iCount  //上线主机总数

     在Dlg的构造函数中出事化为0

            iCount = 0;//初始化上线主机总数为0

6,在ShowMessage()函数中统计在线主机数量,代码如下:

       CString strStatusMsg;

if (strMsg.Find("上线")>0)         //处理上线还是下线消息

{

iCount++;

}else if (strMsg.Find("下线")>0)

{

iCount--;

}else if (strMsg.Find("断开")>0)

{

iCount--;

}

iCount=(iCount<=0?0:iCount);         //防止iCount 有-1的情况

strStatusMsg.Format("在线主机: %d",iCount);

m_wndStatusBar.SetPaneText(0,strStatusMsg);   //在状态条上显示上线主机数

7.列表中添加条目时产生日志:

在Addlist()函数 中添加

ShowMessage(true,strIP+"主机上线");



你可能感兴趣的:(《远控编程笔记》 第三天)