您的位置:首页 > 其它

MFC常用方法总结一

2015-04-22 19:14 351 查看


1. 在任务栏隐藏对话框

      ModifyStyleEx(WS_EX_APPWINDOW,
WS_EX_TOOLWINDOW);


2. 使对话框为顶层窗口

        SetWindowPos(&this->wndTopMost,
0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE)


3. 在运行时添加最大化,最小化按钮

    SetWindowLong(this->m_hWnd,
GWL_STYLE,
                  GetWindowLong(this->m_hWnd,
GWL_STYLE) |
                  WS_MINIMIZEBOX
| WS_MAXIMIZEBOX);
     UpdateWindow();


4. 使能对话框右上角关闭按钮
    在OnInitDialog中

    方法一:

       CMenu* menu = GetSystemMenu(FALSE);

       menu->ModifyMenu(SC_CLOSE, MF_BYCOMMAND | MF_GRAYED );

    方法二:

       CMenu* menu = GetSystemMenu(FALSE);

       menu->EnableMenuItem(SC_CLOSE, MF_BYCOMMAND | MF_GRAYED);



5. 当对话框一部分在屏幕外时,显示全部对话框

    SendMessage(DM_REPOSITION);


6. 改变鼠标外形

    添加 WM_SETCURSOR 消息映射函数

    BOOL CTest6Dlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)

    {

         SetCursor(AfxGetApp()->LoadStandardCursor(IDC_HELP));

         return 0; 

    }


7. 改变对话框背景色和文本颜色

    在CTest6App的InitInstance中添加

    SetDialogBkColor(RGB(255,0,0), RGB(0,255,0));


8. 改变对话框caption上的图标

    导入自己的图标资源到工程中,把原来ID为 IDR_MAINFRAME 的资源删除,把新的
4000
图标的ID命名为IDR_MAINFRAME


9. 在主对话框显示前,显示一个login对话框

     BOOL CTest6App::InitInstance()

     {

          //...

          int nResponse;

          CLoginDlg loginDlg;

          nResponse = loginDlg.DoModal();

          if (nResponse == IDOK)

          {

          }

          if (nResponse == IDCANCEL)

          {

               return FALSE;

          }

 

          CTest6Dlg dlg;

          m_pMainWnd = &dlg;

          int nResponse = dlg.DoModal();

          if (nResponse == IDOK )

          {

          }

          else if (nResponse == IDCANCEL)

          {

          }

          return FALSE;

     }

然后重载CLoginDlg对话框的哦OnOK(),在其中判断条件
void CLoginDlg::OnOK()

{

     if (条件满足)

        CDialog::OnOK();

     else

        AfxMessageBox(_T("invalid password!"));

}


10. 在对话框中添加工具栏

    方法一:添加以下代码到
OnInitDialog 中
 
     if
( !m_wndToolBar.Create(this) || !m_wndToolBar.LoadToolBar(IDR_TOOLBAR1) )
     {
          TRACE0("Failed
to Create Dialog Toolbar\n");
          EndDialog(IDCANCEL);
     }

     CRect
rcClientOld; // 久客户区RECT
     CRect
rcClientNew; // 加入TOOLBAR后的CLIENT RECT
     GetClientRect(rcClientOld);
//
     //
Called to reposition and resize control bars in the client area of a window
     //
The reposQuery FLAG does not really traw the Toolbar.  It only does the calculations.
     //
And puts the new ClientRect values in rcClientNew so we can do the rest of the Math.
     //重新计算RECT大小
     RepositionBars(AFX_IDW_CONTROLBAR_FIRST,
                       AFX_IDW_CONTROLBAR_LAST,
                       0,
                       reposQuery,
                       rcClientNew);

    //
All of the Child Windows (Controls) now need to be moved so the Tollbar does not cover them up.
     //所有的子窗口将被移动,以免被TOOLBAR覆盖
     //
Offest to move all child controls after adding Tollbar
     //计算移动的距离
     CPoint
ptOffset(rcClientNew.left-rcClientOld.left,
       rcClientNew.top-rcClientOld.top);

     CRect
rcChild;
     CWnd*
pwndChild = GetWindow(GW_CHILD);  //得到子窗口
     while(pwndChild)
// 处理所有子窗口
     {
          //移动所有子窗口
         pwndChild->GetWindowRect(rcChild);
          ScreenToClient(rcChild);
          rcChild.OffsetRect(ptOffset);
          pwndChild->MoveWindow(rcChild,FALSE);
          pwndChild
= pwndChild->GetNextWindow();
   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mfc