zoukankan      html  css  js  c++  java
  • MFC基础笔记

    List Control

    // List Control初始化,下面代码需要放在OnInitDialog()函数里面
    //
    设置扩展风格:正行选中 m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES); // 添加标题 m_list.InsertColumn(0, _T("名称"), LVCFMT_CENTER, 150); m_list.InsertColumn(1, _T("PID"), LVCFMT_CENTER, 100); m_list.InsertColumn(2, _T("文件所在位置"), LVCFMT_CENTER, 325);
    // ------------------------------
    // 先插入一个item到列表
    m_list.InsertItem(dwIndex, L"");
    // 将进程名插入到item第0列
    m_list.SetItemText(dwIndex, 0, pe.szExeFile);
    // 将进程PID插入到item第1列
    str.Format(_T("%d"), pe.th32ProcessID);
    m_list.SetItemText(dwIndex, 1, str);

     // 需要用到列表里面的内容的时候,会用到下面的代码

     if (m_list.GetSelectedCount() == 1)
     {
      POSITION pos_s;
      pos_s = m_list.GetFirstSelectedItemPosition();
      int item = m_list.GetNextSelectedItem(pos_s);

      CString m_exeName;
      m_exeName = m_list.GetItemText(item, 1);
     }

    如何让MFC窗口的Esc键和Enter键失效?

    // 重写PreTranslateMessage函数,让程序主窗口的Enter键和Esc键失效
    BOOL CFileDlg::PreTranslateMessage(MSG* pMsg)
    {
        // TODO:  在此添加专用代码和/或调用基类
        if (pMsg->message == WM_KEYDOWN)
        {
            int nKey = (int)pMsg->wParam;
            if (nKey == VK_RETURN || nKey == VK_ESCAPE)
            {
                return true;
            }
        }
        return CDialogEx::PreTranslateMessage(pMsg);
    }

    如何加载菜单

    CMenu m_Menu; // 最好写为类的成员变量
    m_Menu.LoadMenuW(IDR_MENU1);
    SetMenu(&m_Menu);
    // 实现主菜单的子菜单前面的图标
    CBitmap m_Bmp[2]; // 最好写为类的成员变量
    m_Bmp[0].LoadBitmap(IDB_EXIT);
    m_Bmp[1].LoadBitmap(IDB_ABOUT);
    GetMenu()->GetSubMenu(0)->SetMenuItemBitmaps(0, MF_BYPOSITION, &m_Bmp[0], &m_Bmp[0]);
    GetMenu()->GetSubMenu(1)->SetMenuItemBitmaps(0, MF_BYPOSITION, &m_Bmp[1], &m_Bmp[1]);

    列表右键弹出菜单

    // 定义下面要用到的cmenu对象 
    CMenu menu, *pSubMenu;
    // 装载自定义的右键菜单 
    menu.LoadMenu(IDR_MENU2);
    // 获取子菜单项
    pSubMenu = menu.GetSubMenu(0);
    // 实现右键菜单前面的图标
    pSubMenu->SetMenuItemBitmaps(0, MF_BYPOSITION, &m_subBmp[0], &m_subBmp[0]);
    pSubMenu->SetMenuItemBitmaps(1, MF_BYPOSITION, &m_subBmp[1], &m_subBmp[1]);
    // 代表没有列表项被选中,则禁用结束进程的功能
    if (pNMItemActivate->iItem == -1)
    {
      pSubMenu->EnableMenuItem(ID_32774, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
    }
    // 获取第一个弹出菜单,所以第一个菜单必须有子菜单
    // 定义一个用于确定光标位置的位置 CPoint oPoint; //获取当前光标的位置,以便使得菜单可以跟随光标 GetCursorPos(&oPoint); // 弹出子菜单 pSubMenu->TrackPopupMenu(TPM_LEFTALIGN, oPoint.x, oPoint.y, this);

    点击按钮弹出对话框

    CAbout dlg(this);
    dlg.DoModal();

    点击按钮打开一个选择文件对话框

    // 1、打开一个文件夹选择对话框
    CFileDialog dlg(TRUE);
    if (dlg.DoModal() == IDOK)
    {
        CString path = dlg.GetFolderPath();
        // 2、获取选择的文件的后缀名,判断是否是DLL
        CString path1 = dlg.GetFileName();
        PCTSTR FileType = PathFindExtension(path1);
        if (wcscmp(FileType, L".dll") != 0)
        {
            m_Edit2.SetWindowText(L"");
            return;
         }
            // 3、将文件路径显示到编辑框
         m_Edit2.SetWindowText(path + L"\" + path1);
     }

    Tab Control 第一种方法

      CProcess* pDlg = new CProcess;
        CMyPE* peDlg = new CMyPE;
        CMyFunction* fDlg = new CMyFunction;
        CMySCMManager* sDlg = new CMySCMManager;
        m_tab.AddTab(L"进程", pDlg);
        m_tab.AddTab(L"PE", peDlg);
        m_tab.AddTab(L"功能", fDlg);
        m_tab.AddTab(L"服务", sDlg);
    
        CRect rt;
        GetClientRect(rt);
        rt.top += 20;
        rt.left += 1;
        rt.right -= 1;
        rt.bottom -= 1;
        // 显示进程子窗口
        pDlg->MoveWindow(rt);
        pDlg->ShowWindow(SW_SHOW);
        // 隐藏pe子窗口
        peDlg->ShowWindow(SW_HIDE);
        // 隐藏功能子窗口
        fDlg->ShowWindow(SW_HIDE);
        // 隐藏服务窗口
        sDlg->ShowWindow(SW_HIDE)

    // 要自定义下面的类 和函数

    class CMyTabCtrl :
    public CTabCtrl
    {
    public:
    CMyTabCtrl();
    ~CMyTabCtrl();
    // 保存tab对应的子窗口
    std::vector<CWnd*> m_SubWnd;
    void AddTab(const CString& title, CWnd* pSubWnd);
    DECLARE_MESSAGE_MAP()
    afx_msg void OnTcnSelchange(NMHDR *pNMHDR, LRESULT *pResult);
    };

    // 添加控件处理函数
    void CMyTabCtrl::AddTab(const CString& title, CWnd* pSubWnd)
    {
    // 调用父类的添加选项卡的函数
    CTabCtrl::InsertItem(m_SubWnd.size(), title);
    m_SubWnd.push_back(pSubWnd);
    // 将子窗口的父窗口设置为本窗口(选项卡)
    pSubWnd->ShowWindow(SW_SHOW);
    pSubWnd->SetParent(this);

    CRect rt;
    GetClientRect(rt);
    rt.top += 20;
    rt.left += 1;
    rt.right -= 1;
    rt.bottom -= 1;
    // 显示当前选项卡对应的子窗口
    if (pSubWnd != NULL)
    {
    pSubWnd->MoveWindow(rt);
    }
    }

    // 切换控件处理函数
    void CMyTabCtrl::OnTcnSelchange(NMHDR *pNMHDR, LRESULT *pResult)
    {
    // TODO: 在此添加控件通知处理程序代码
    *pResult = 0;
    // 获取当前选中项
    DWORD dwIndex = this->GetCurSel();
    // 遍历所有窗口,将子窗口都隐藏起来
    for (auto&i : m_SubWnd)
    {
    if (i != NULL)
    {
    i->ShowWindow(SW_HIDE);
    }
    }

    CRect rt;
    GetClientRect(rt);
    rt.top += 20;
    rt.left += 1;
    rt.right -= 1;
    rt.bottom -= 1;
    // 显示当前选项卡对应的子窗口
    if (m_SubWnd[dwIndex] != NULL)
    {
    m_SubWnd[dwIndex]->MoveWindow(rt);
    m_SubWnd[dwIndex]->ShowWindow(SW_SHOW);
    }
    }

    Tab Control 第二种方法

    CTabCtrl m_tab;
    CFileview *m_fileview;
    CFiletrans *m_filetrans;
    // 设置Tab控件前面的图标
    m_imagetab.Create(16, 16, ILC_COLOR24 | ILC_MASK, 1, 0);
    // 文件查看
    m_imagetab.Add(LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON7)));  
    // 文件传输
    m_imagetab.Add(LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON6)));
    m_tab.SetImageList(&m_imagetab);
    
    // Tab控件插入两个节点
    m_tab.InsertItem(0, _T("文件查看"), 0);
    m_tab.InsertItem(1, _T("文件传输"), 1);
    
    // 显示文件查看对话框
    m_fileview = new CFileview(this, m_sock);
    m_fileview->Create(IDD_FILEVIEW, &m_tab);
    CRect m_rect;
    // 获取Tab控件客户区大小到m_rect
    m_tab.GetClientRect(m_rect);
    // 缩小m_rect的大小
    m_rect.DeflateRect(0, 20, 0, 0);
    // 移动窗口
    m_fileview->MoveWindow(m_rect);
    
    // 显示文件传输对话框
    m_filetrans = new CFiletrans(this, m_sock);
    m_filetrans->Create(IDD_FILETRANS, &m_tab);
    m_tab.GetClientRect(m_rect);
    m_rect.DeflateRect(0, 20, 0, 0);
    m_filetrans->MoveWindow(m_rect);
    
    // 默认显示文件查看对话框
    m_fileview->ShowWindow(SW_SHOW);
    // Tab控件切换处理函数
    void CFileDlg::OnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)
    {
        // TODO:  在此添加控件通知处理程序代码
    
        // 获取所选择的焦点ID
        int sel = m_tab.GetCurFocus();
        switch (sel)
        {
        case 0:
        {
            m_fileview->ShowWindow(SW_SHOW);
            m_filetrans->ShowWindow(SW_HIDE);
        }
        break;
        case 1:
        {
            m_fileview->ShowWindow(SW_HIDE);
            m_filetrans->ShowWindow(SW_SHOW);
        }
        break;
        }
        *pResult = 0;
    }

    状态栏

    // 初始化状态栏
    CStatusBar m_statusbar;
    BOOL hbar = m_statusbar.Create(this);
    UINT b[3] = { 1009, 1010 };
    // 设置分栏的个数和每个分栏的ID
    hbar = m_statusbar.SetIndicators(b, 2);
    // 设置分栏的宽度
    m_statusbar.SetPaneInfo(0, b[0], SBPS_NORMAL, 200);
    m_statusbar.SetPaneInfo(1, b[1], SBPS_NORMAL, 200);
    // 设置分栏的文本
    m_statusbar.SetPaneText(0, _T(""));
    m_statusbar.SetPaneText(1, _T(""));
    // 显示状态栏
    RepositionBars(AFX_IDW_CONTROLBAR_FIRST, 
  • 相关阅读:
    华为手机wifi调试adb,断开数据线offlin
    appium 识别抖音视频已经播放完成
    对于学习新知识的一点自我反思
    部分软件激活
    AndroidStudio 创建简单的app
    App 逆向思路
    链家
    pyqt5 截屏
    3.无重复字符的最长子串
    1.两数之和
  • 原文地址:https://www.cnblogs.com/duxie/p/10857765.html
Copyright © 2011-2022 走看看