zoukankan      html  css  js  c++  java
  • (转)MFC学习技巧<三>

    31. 如何在编辑控件中以追加的方式添入字符?
     [问题提出]
      SetDlgItemText可以向Edit控件中输入字符,发送更新的消息也可是Edit控件显示与其关联的变量的值,但若是向已有的Edit字符后追加字符,该如何做?
     [程序实现]
      建立名为My的对话框工程,添加一个Edit和一个Button控件.Edit的ID=IDC_EDIT1,Button的ID=IDC_BUTTON1.建立和IDC_BUTTON1的响应函数:OnButton1()

      void CMyDlg::OnButton1() 
      {
        CString pText="你好";
        CEdit *m_Edit=(CEdit *)GetDlgItem(IDC_EDIT1);
        int nLen=m_Edit->GetWindowTextLength(); 
        m_Edit->SetFocus(); 
        m_Edit->SetSel(nLen, nLen); 
        m_Edit->ReplaceSel(pText); 
      }

    在Edit控件中输入字符,想追加时按IDC_BUTTON1按钮.看看效果.


    32.属性页标题改名
    我用CPropertySheet创建属性页,用的CPropertyPage对象只有一个,也就是每个属性页的内容一样.现在的问题是:这样每个属性页的标题都是一样的,是对话框的标题!怎样动态的改变这个标题,使每个属性页的标签的名称都不同??

    CTabCtrl * pCtrl = pSheet->GetTabControl();
    TCITEM tc;
    tc.mask = TCIF_TEXT;
    tc.pszText = "新标题";
    pCtrl->SetItem(0,&tc);//0即是你要改的TAb的索引
    

    33. 怎样去掉属性页的Apply与Help按钮?

    //去掉Help
      m_psh.dwFlags |= PSH_HASHELP ;
      m_psh.dwFlags &= ~PSH_HASHELP ;
    //除掉应用按钮 
    m_psh.dwFlags|=PSH_NOAPPLYNOW; 


    34. 如何给树控件加入工具提示
    1.首先给树控件加入TVS_INFOTIP属性风格,如下所示:

    if (!m_ctrlTree.Create(WS_CHILD|WS_VISIBLE|
      TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT|TVS_SHOWSELALWAYS|TVS_INFOTIP, //加入提示TVS_INFOTIP,jingzhou xu(树控件ID:100)
       CRect(0, 0, 0, 0), &m_wndTreeBar, 100))
      {
       TRACE0("Failed to create instant bar child\n");
       return -1;
      }


    2.其次加入映射消息声明,如下所示:

    afx_msg void OnGetInfoTip(NMHDR* pNMHDR,LRESULT* pResult);    //树控件上加入提示消息,jingzhou xu  
    ON_NOTIFY(TVN_GETINFOTIP, 100, OnGetInfoTip)       //树控件条目上加入提示,jingzhou xu


    3.最后加入呼应涵数处理:

    void CCreateTreeDlg::OnGetInfoTip(NMHDR* pNMHDR, LRESULT* pResult) 
     {
     *pResult = 0;
     NMTVGETINFOTIP* pTVTipInfo = (NMTVGETINFOTIP*)pNMHDR;
     LPARAM itemData = (DWORD) pTVTipInfo->lParam;
     //对应每个条目的数据
     HTREEITEM hItem = pTVTipInfo->hItem;
     CString tip;
     HTREEITEM hRootItem = m_chassisTree.GetRootItem();
     if (hRootItem != pTVTipInfo->hItem)
     {
      tip = "树结点的提示";
     }
     else
     {
      tip = "树根上的提示";
     }
     strcpy(pTVTipInfo->pszText, (LPCTSTR) tip);
    }
    


    35. 如何在TreeList中加图标?
     [问题提出]
     请问treeview控件和treectrl控件的用法有何不同呢?向如何imagelist控件中加图象呀?
     [解决方法]
     1)

      HICON hicon[8];
      m_imageList.Create(16,16,0,8,8);
      hicon[0]=AfxGetApp()->LoadIcon(IDI_ICON0);
      hicon[1]=AfxGetApp()->LoadIcon(IDI_ICON1);
      hicon[2]=AfxGetApp()->LoadIcon(IDI_ICON2);
      hicon[3]=AfxGetApp()->LoadIcon(IDI_ICON3);
      hicon[4]=AfxGetApp()->LoadIcon(IDI_ICON4);
      hicon[5]=AfxGetApp()->LoadIcon(IDI_ICON5);
      hicon[6]=AfxGetApp()->LoadIcon(IDI_ICON6);
      hicon[7]=AfxGetApp()->LoadIcon(IDI_ICON7);
      for(int n=0;n<8;n++)
        m_imageList.Add(hicon[n]);
      CTreeCtrl *pTree=(CTreeCtrl *)GetDlgItem(IDC_TREE);
      pTree->SetImageList(&m_imageList,TVSIL_NORMAL);
    

     2)

        CImageList cil1;
      cil1.Create(32,32,TRUE,2,2);
      cil1.Add(pApp->LoadIcon(IDI_DAO1));
      cil1.Add(pApp->LoadIcon(IDI_DAO2));
      cil1.Add(pApp->LoadIcon(IDI_DAO3));
      cil1.Add(pApp->LoadIcon(IDI_DAO4));
      cil1.Add(pApp->LoadIcon(IDI_DAO5));
      cil1.Add(pApp->LoadIcon(IDI_DAO6));
      cil1.Add(pApp->LoadIcon(IDI_DAO7));
      cil1.Add(pApp->LoadIcon(IDI_DAO8));
      cil1.Add(pApp->LoadIcon(IDI_DAO9));
      //设置图象列表
      m_list.SetImageList(&cil1,LVSIL_NORMAL);
    


    36. 如何双击列表框项启动一个与文件关联的程序?
    有人问我如何双击列表框项启动一个程序?其实这个问题很简单,Windows中有一个API函数可以打开任何类型的文件:
    ShellExecute(NULL,"open",lpFileName,NULL,NULL,SW_SHOWNORMAL);
    参数 lpFileName 是文件的全路径名。用这个变量你可以传递象“C:\\MyExcelFile.xls”或者“http://www.vckbase.com”启动Excel程序或者浏览器程序。如果你只是想获取与文件关联的程序名,而不是要运行程序,那么调用::FindExecutable就可以了。

    37. 如何防止在listbox中添加很多数据出现不停的刷新?
     [问题提出]
      在listbox添加很多数据的时候,由于控件不停的刷新,导致出现闪烁,如何解决?
     [解决方法]
      再添加数据以前,禁止控件刷新,数据添加完毕以后,再刷新一次。
     [程序实现](其中:m_ListBox是CListBox的控件类型的变量)

      m_ListBox.LockWindowUpdate();//禁止本listbox刷新。
      for(int i=0;i<9999;i++)
      {
         m_ListBox.AddString("test");
      }//添加数据。 
      this->RedrawWindow(NULL,NULL,RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE);
    

    38. 如何得到CListBox所选择项的String?
     [问题提出]
     如何得到CListBox所选择项的String
     [解决方法]
     用到:CListBox::GetText()
     [程序实现]

     CString scInfo; 
     pList->GetText( GetCurSel(),scInfo);


    39. 用鼠标移动基于对话框的无标题栏程序的简单方法

    void CVCTestDlg::OnLButtonDown(UINT nFlags, CPoint point) 
    {
      //一句话解决问题 
      SendMessage(WM_SYSCOMMAND,0xF012,0);
      CDialog::OnLButtonDown(nFlags, point);
    }


    40. 如何改变框对话或窗体视窗的背景颜色
    调用CWinApp : : SetDialogBkColor可以改变所有应用程序的背景颜色。第一个参数指定了背景颜色,第二个参数指定了文本颜色。下例将应用程序对话设置为蓝色背景和黄色文本。

    BOOL CSampleApp : : InitInstance ( )
    {
    …
    //use blue dialog with yellow text .
    SetDialogBkColor (RGB (0, 0, 255 ), RGB ( 255 , 255 , 0 ) ) ;
    …
    }

    需要重画对话(或对话的子控件)时,Windows向对话发送消息WM_CTLCOLOR,通常用户可以让Windows选择绘画背景的刷子,也可重置该消息指定刷子。下例说明了创建一个红色背景对话的步骤。
    首先,给对话基类增加一人成员变量CBursh :

    class CMyFormView : public CFormView
    {
    …
    private :
    CBrush m_ brush ; // background brush
    …
    } ;

    其次, 在类的构造函数中将刷子初始化为所需要的背景颜色。

    CMyFormView : : CMyFormView ( )
    {
    // Initialize background brush .
    m_brush .CreateSolidBrush (RGB ( 0, 0, 255 ) )
    }

    最后,使用ClassWizard处理WM_CTLCOLOR消息并返回一个用来绘画对话背景的刷子句柄。注意:由于当重画对话控件时也要调用该函数,所以要检测nCtlColor参量。
    HBRUSH CMyFormView : : OnCtlColor (CDC* pDC , CWnd*pWnd , UINT nCtlColor )
    {
    // Determine if drawing a dialog box . If we are , return +handle to
    //our own background brush . Otherwise let windows handle it .
    if (nCtlColor = = CTLCOLOR _ DLG )
    return (HBRUSH) m_brush .GetSafeHandle ( ) ;
    return CFormView : : OnCtlColor (pDC, pWnd , nCtlColor );
    }

  • 相关阅读:
    HDU 1698-Just a Hook
    HDU 1394 Minimum Inversion Number(线段树)
    HDU 4253-Two Famous Companies(二分+最小生成树)
    POJ 3279
    POJ 2251 Dungeon Master
    POJ1321 棋盘问题
    Charlie's Change POJ
    Coins —— POJ-1742
    sublime text主要快捷键列表
    根据电脑分辨率调整网站的布局
  • 原文地址:https://www.cnblogs.com/leven20061001/p/2728102.html
Copyright © 2011-2022 走看看