各位高手,请教一下如何删除标签式对话框创建后出现的3个默认按钮???不胜感激!!!

解决方案 »

  1.   

    看了这篇文章,你还有什么不会的么   
        
      深入浅出   CPropertySheet   
      译者:徐景周(原作:Mustafa   Demirhan)   
        
      为了最大限度的发挥属性页的效用,首先让我们先从   CPropertySheet   继承一个新类,取名为   CMyPropSheet.   
      接着便可以进行下面的各种操作:   
        
        一、隐藏属性页默认按钮     
      隐藏掉Apply应用按钮:     
        
      propsheet.m_psh.dwFlags   |=   PSH_NOAPPLYNOW;   
      或隐藏掉Cancel取消按钮:CWnd   *pWnd   =   GetDlgItem(   IDCANCEL   );   
      pWnd->ShowWindow(   FALSE   );   
        
        二、移动属性页按钮   
      首先,要获取按钮的句柄,然后就可以象对待窗体一样处理它们了.   下面代码先隐藏掉Apply和Help铵钮,再把OK和Cancel按移动到右侧。   BOOL   CMyPropSheet::OnInitDialog   ()     
      {   
              BOOL   bResult   =   CPropertySheet::OnInitDialog();   
        
              int   ids   []   =   {IDOK,   IDCANCEL};//,   ID_APPLY_NOW,   IDHELP   };   
                
              //   Hide   Apply   and   Help   buttons   
              CWnd   *pWnd   =   GetDlgItem   (ID_APPLY_NOW);   
              pWnd->ShowWindow   (FALSE);   
              pWnd   =   GetDlgItem   (IDHELP);   
              pWnd->ShowWindow   (FALSE);   
                
              CRect   rectBtn;   
              int   nSpacing   =   6;                 //   space   between   two   buttons...   
        
              for(   int   i   =0;   i   <   sizeof(ids)/sizeof(int);   i++)   
              {   
                      GetDlgItem   (ids   [i])->GetWindowRect   (rectBtn);   
                        
                      ScreenToClient   (&rectBtn);   
                      int   btnWidth   =   rectBtn.Width();   
                      rectBtn.left   =   rectBtn.left   +   (btnWidth   +   nSpacing)*   2;   
                      rectBtn.right   =   rectBtn.right   +   (btnWidth   +   nSpacing)*   2;   
        
                      GetDlgItem   (ids   [i])->MoveWindow(rectBtn);   
              }   
        
                
              return   bResult;   
      }   
        
        
      下面代码移动所有按钮到右侧,并且重新置属性页为合适的大小.BOOL   CMyPropSheet::OnInitDialog   ()     
      {   
              BOOL   bResult   =   CPropertySheet::OnInitDialog();   
        
                
              int   ids[]   =   {   IDOK,   IDCANCEL,   ID_APPLY_NOW   };   
                
              CRect   rectWnd;   
              CRect   rectBtn;   
                
              GetWindowRect   (rectWnd);   
              GetDlgItem   (IDOK)->GetWindowRect   (rectBtn);   
                
              int   btnWidth   =   rectBtn.Width();   
              int   btnHeight   =   rectBtn.Height();   
              int   btnOffset   =   rectWnd.bottom   -   rectBtn.bottom;   
              int   btnLeft   =   rectWnd.right   -   rectWnd.left;   
        
              rectWnd.bottom   =   rectBtn.top;   
              rectWnd.right   =   rectWnd.right   +   btnWidth   +   btnOffset;   
              MoveWindow(rectWnd);   
                
              rectBtn.left   =   btnLeft;   
              rectBtn.right   =   btnLeft   +   btnWidth;   
        
              for   (int   i   =   0;   i   <   sizeof   (ids)   /   sizeof   (int);   i++)   
              {   
                      rectBtn.top   =   (i   +   1)   *   btnOffset   +   btnHeight   *   i;   
                      rectBtn.bottom   =   rectBtn.top   +   btnHeight;   
                      GetDlgItem   (ids   [i])->MoveWindow   (rectBtn);   
              }   
                
              return   bResult;   
      }   
        
        
      
      

  2.   

      三、改变属性页上的标签文字   
      首先修改TC_ITEM结构,然后用   SetItem   来修改标签文字,如下代码:TC_ITEM   item;   
      item.mask   =   TCIF_TEXT;   
      item.pszText   =   "New   Label";   
        
      //Change   the   label   of   the   first   tab   (0   is   the   index   of   the   first   tab)...   
      GetTabControl   ()->SetItem   (0,   &item);   
        
        四、改变属性页标签文字的字体属性   
      代码如下m_NewFont.CreateFont   (14,   0,   0,   0,   800,   TRUE,   0,   0,   1,   0,   0,   0,   0,   _T("Arial")   );   
              GetTabControl()->SetFont   (&m_NewFont);   
        
        五、在属性页标签上显示位图     
      可以用   CImageList   建立图像.   用   SetItem   来设置,如下代码所示:BOOL   CMyPropSheet::OnInitDialog   ()   
      {   
              BOOL   bResult   =   CPropertySheet::OnInitDialog();   
        
              m_imageList.Create   (IDB_MYIMAGES,   13,   1,   RGB(255,255,255));   
              CTabCtrl   *pTabCtrl   =   GetTabControl   ();   
              pTabCtrl->SetImageList   (&m_imageList);   
                
              TC_ITEM   item;   
              item.mask   =   TCIF_IMAGE;   
              for   (int   i   =   0;   i   <   NUMBER_OF_TABS;   i++)   
              {   
                      item.iImage   =   i;   
                      pTabCtrl->SetItem   (i,   &item   );   
              }   
        
              return   bResult;   
      }   
        
        
        六、在属性页左下角显示位图   
      如下代码所示:   void   CMyPropSheet::OnPaint   ()     
      {   
              CPaintDC   dc(this);   //   device   context   for   painting   
                
              int   nOffset   =   6;   
              //   load   IDB_BITMAP1   from   our   resources   
              CBitmap   bmp;   
              if   (bmp.LoadBitmap   (IDB_BITMAP1))   
              {   
                      //   Get   the   size   of   the   bitmap   
                      BITMAP   bmpInfo;   
                      bmp.GetBitmap   (&bmpInfo);   
                        
                      //   Create   an   in-memory   DC   compatible   with   the   
                      //   display   DC   we''re   using   to   paint   
                      CDC   dcMemory;   
                      dcMemory.CreateCompatibleDC   (&dc);   
                        
                      //   Select   the   bitmap   into   the   in-memory   DC   
                      CBitmap*   pOldBitmap   =   dcMemory.SelectObject   (&bmp);   
                        
                      //   Find   a   bottom-left   point   for   the   bitmap   in   the   client   area   
                      CRect   rect;   
                      GetClientRect   (&rect);   
                      int   nX   =   rect.left   +   nOffset;   
                      int   nY   =   rect.top   +   (rect.Height   ()   -   bmpInfo.bmHeight)   -   nOffset;   
                        
                      //   Copy   the   bits   from   the   in-memory   DC   into   the   on-   
                      //   screen   DC   to   actually   do   the   painting.   Use   the   centerpoint   
                      //   we   computed   for   the   target   offset.   
                      dc.BitBlt   (nX,   nY,   bmpInfo.bmWidth,   bmpInfo.bmHeight,   &dcMemory,     
                              0,   0,   SRCCOPY);   
                        
                      dcMemory.SelectObject   (pOldBitmap);   
              }   
        
              //   Do   not   call   CPropertySheet::OnPaint()   for   painting   messages   
      }   
        
        
        七、在属性页右下角显示3D文字Logo   
      代码如下:void   CMyPropSheet::OnPaint   ()     
      {   
              /////////////////////////////////////////////////////////////////////////   
      //在TAB按钮旁边显示3D文字提示,jingzhou   xu   
      Cstring   m_LogoName   =   “属性页”;   
      // if(m_LogoName   ==   "")   
      // return;   
        
      GetWindowRect(rect);   
      ScreenToClient(rect);   
        
      LOGFONT   logFont;   
      ZeroMemory((void*)&logFont,sizeof(logFont));   
      strcpy(logFont.lfFaceName,"宋体");   
      logFont.lfHeight   =   -12;   
      logFont.lfWeight   =   400;   
      logFont.lfCharSet   =   GB2312_CHARSET;   
      logFont.lfOutPrecision   =   3;   
      logFont.lfClipPrecision   =   2;     
      logFont.lfQuality   =   1;   
      logFont.lfPitchAndFamily   =   2;   
      m_font.CreateFontIndirect(&logFont);   
      SetFont(&m_font);   
      CFont *pOldFont   =   pDC->SelectObject(&m_font);   
        
      rect.left   +=   6;   
      rect.right   -=   6;   
      rect.bottom   -=   1;   
      rect.top   =   rect.bottom   -   ITEMBUTTON_HEIGHT   +   1;   
        
        
      CFont   m_LogoFont;   
      CString   sLogoString;   
        
      m_LogoFont.CreateFont(rect.Height()*4/5,   0,   0,   0,   FW_BOLD,   1,   FALSE,   FALSE,   
      DEFAULT_CHARSET,   OUT_DEFAULT_PRECIS,   CLIP_DEFAULT_PRECIS,   DEFAULT_QUALITY,   
      FIXED_PITCH   |   FF_ROMAN,   "楷体_GB2312");   
        
      sLogoString   =   m_LogoName;   
        
      RECT   m_rDataBox;   
      CopyRect(&m_rDataBox,&rect);   
        
      TEXTMETRIC   tm;   
      pDC->GetTextMetrics(&tm);   
      CFont*   oldFont   =   pDC->SelectObject(&m_LogoFont);   
      CSize   sz   =   pDC->GetTextExtent(sLogoString,   sLogoString.GetLength());   
      //用GetTextExtent来计算字体logo大小,依靠于设备环境,使用logo位于右下角   
      m_rDataBox.left   =   m_rDataBox.right     -   sz.cx   -   tm.tmAveCharWidth/2;   
      m_rDataBox.top     =   m_rDataBox.bottom   -   sz.cy   -   tm.tmHeight/5;   
      pDC->SetBkMode(TRANSPARENT);   
      //用3D字体显示,先黑后白,最后再用默认色   
      COLORREF   oldColor   =   pDC->SetTextColor(GetSysColor(COLOR_3DDKSHADOW));   
      pDC->DrawText(sLogoString,   sLogoString.GetLength(),   &m_rDataBox,   DT_VCENTER   |   DT_SINGLELINE   |   DT_CENTER);   
      m_rDataBox.left   -=   tm.tmAveCharWidth;   
      pDC->SetTextColor(GetSysColor(COLOR_3DHILIGHT));   
      pDC->DrawText(sLogoString,   sLogoString.GetLength(),   &m_rDataBox,   DT_VCENTER   |   DT_SINGLELINE   |   DT_CENTER);   
      m_rDataBox.left   +=   3*tm.tmAveCharWidth/5;   
      pDC->SetTextColor(RGB(0,0,255));   
      pDC->DrawText(sLogoString,   sLogoString.GetLength(),   &m_rDataBox,   DT_VCENTER   |   DT_SINGLELINE   |   DT_CENTER);   
        
      //释放资源   
      pDC->SelectObject(oldFont);   
      pDC->SetTextColor(oldColor);         
      m_LogoFont.DeleteObject();   
      /////////////////////////////////////////////////////////////////////////   
      }   
        
        八、在属性页中动态加入其它控件   
      下面演示如何在左下角加入一Edit控件:   
      MyPropSheet.h中:public:   
              CEdit   m_edit;   
        
      MyPropSheet.cpp中:BOOL   CMyPropSheet::OnInitDialog   ()   
      {   
              BOOL   bResult   =   CPropertySheet::OnInitDialog   ();   
        
                
              CRect   rect;   
                
              int   nHeight   =   24;   
              int   nWidth   =   120;   
              int   nOffset   =   6;   
                
              GetClientRect   (&rect);   
        
              //   Find   a   bottom-left   point   for   the   edit   control   in   the   client   area   
              int   nX   =   rect.left   +   nOffset;   
              int   nY   =   rect.top   +   (rect.Height()   -   nHeight)   -   nOffset;   
                
              //   finally   create   the   edit   control   
              m_Edit.CreateEx   (WS_EX_CLIENTEDGE,   _T("EDIT"),   NULL,   
                                                WS_CHILD   |   WS_VISIBLE   |   WS_TABSTOP   |   WS_BORDER,     
                      nX,   nY,   nWidth,   nHeight,   m_hWnd,   0,   0   );   
        
              return   bResult;   
      }