日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【转】MFC学习总结

發(fā)布時(shí)間:2023/12/1 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】MFC学习总结 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

HBRUSH CAboutDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
 if ((pWnd->GetDlgCtrlID() == IDC_EDIT1) && (nCtlColor == CTLCOLOR_EDIT))
 {
   COLORREF clr = RGB(255,0,0);
   pDC->SetTextColor(clr);  //設(shè)置紅色的文本
   clr = RGB(0,0,0);
   pDC->SetBkColor(clr);   //設(shè)置黑色的背景
   m_brMine = ::CreateSolidBrush(clr);
   return m_brMine; //作為約定,返回背景色對(duì)應(yīng)的刷子句柄
 }
 else
 {
   HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
   return hbr;
 }
}

第二種方法(對(duì)應(yīng)于IDC_EDIT2):
利用MFC 4.0的新特性: Message reflection。

1.利用向?qū)砑右粋€(gè)新的類:CColorEdit,基類為CEdit;
2.在CColorEdit中添加一個(gè)數(shù)據(jù)成員: HBRUSH m_bkBrush;
3.利用向?qū)в成銫ColorEdit的"=WM_CTLCOLOR"消息,產(chǎn)生函數(shù):

HBRUSH CColorEdit::CtlColor(CDC* pDC, UINT nCtlColor);

對(duì)其進(jìn)行如下修改:

HBRUSH CColorEdit::CtlColor(CDC* pDC, UINT nCtlColor)
{
 COLORREF clr = RGB(0,0,0);
 pDC->SetTextColor(clr);  //設(shè)置黑色的文本
 clr = RGB(255,0,0);
 pDC->SetBkColor(clr);   //設(shè)置紅色的背景
 m_bkBrush = ::CreateSolidBrush(clr);
 return m_bkBrush; //作為約定,返回背景色對(duì)應(yīng)的刷子句柄
}

4.利用向?qū)镮DC_EDIT2生成一個(gè)數(shù)據(jù)成員CColorEdit m_coloredit;
5.在定義CAboutDlg的color.cpp文件中加入:#include "coloredit.h"

30. 如何防止密碼被非法獲取?

 [問題提出]
  這兩天大家比較專注在獲取Edit密碼框的密碼.在盜取時(shí),我們?nèi)绾畏婪赌?
 
 [解決方法]
  此方法針對(duì)于通過SendMessage向此窗口發(fā)送WM_GETTEXT或EM_GETLINE消息來取得密碼.跟我來.
 
 [程序?qū)崿F(xiàn)]
  方法很簡單,用CWnd::DefWindowProc函數(shù)攔截得到的消息(向Edit發(fā)的).
  建立名為My的對(duì)話框工程.建立一個(gè)Edit控件ID=IDC_EDIT1.建一個(gè)新類名為CMyProtectEdit,派生于CEdit.
  在MyDlg.cpp中聲明全局變量:BOOL g_bIdentity;
  BOOL g_bIdentity;

  在MyProtecEdit.cpp中:
  extern BOOL g_bIdentity;

  響應(yīng)CMyProtectEdit的DefWindowProc函數(shù):
  LRESULT CMyProtectEdit::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
  {
    // TODO: Add your specialized code here and/or call the base class
    // 對(duì)Edit的內(nèi)容獲取必須通過以下兩個(gè)消息之一,不對(duì)其采用默認(rèn)的處理:
    if(( message == WM_GETTEXT) || ( message == EM_GETLINE))
    {  //檢查是否為合法
     if(!g_bIdentity)
     {  //非法獲取,顯示非法信息
       AfxMessageBox(_T("不能讓你看我的密碼,:( !"));
       return 0;
     )
     g_bIdentity = FALSE;//合法獲取
    }
    
    return CEdit::DefWindowProc(message, wParam, lParam);
  }

  然后在MyDlg.cpp中
  void CMyDlg::DoDataExchange(CDataExchange* pDX)
  {
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CGetPasswordDlg)
    // NOTE: the ClassWizard will add DDX and DDV calls here
    if( pDX->m_bSaveAndValidate)
    {
     g_bIdentity = TRUE;
    }   
    //}}AFX_DATA_MAP
  }
  即可.找個(gè)程序(盜取)的試試.

?
?2006-10-8 15:55:13??
huzunbo
?
??

?
?
31. 如何在編輯控件中以追加的方式添入字符?

 [問題提出]
  SetDlgItemText可以向Edit控件中輸入字符,發(fā)送更新的消息也可是Edit控件顯示與其關(guān)聯(lián)的變量的值,但若是向已有的Edit字符后追加字符,該如何做?
 [程序?qū)崿F(xiàn)]
  建立名為My的對(duì)話框工程,添加一個(gè)Edit和一個(gè)Button控件.Edit的ID=IDC_EDIT1,Button的ID=IDC_BUTTON1.建立和IDC_BUTTON1的響應(yīng)函數(shù):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控件中輸入字符,想追加時(shí)按IDC_BUTTON1按鈕.看看效果.

32.屬性頁標(biāo)題改名

我用CPropertySheet創(chuàng)建屬性頁,用的CPropertyPage對(duì)象只有一個(gè),也就是每個(gè)屬性頁的內(nèi)容一樣.現(xiàn)在的問題是:這樣每個(gè)屬性頁的標(biāo)題都是一樣的,是對(duì)話框的標(biāo)題!怎樣動(dòng)態(tài)的改變這個(gè)標(biāo)題,使每個(gè)屬性頁的標(biāo)簽的名稱都不同??


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

33. 怎樣去掉屬性頁的Apply與Help按鈕?

//去掉Help
  m_psh.dwFlags |= PSH_HASHELP ;
  m_psh.dwFlags &= ~PSH_HASHELP ;
//除掉應(yīng)用按鈕 m_psh.dwFlags|=PSH_NOAPPLYNOW;

34. 如何給樹控件加入工具提示

1.首先給樹控件加入TVS_INFOTIP屬性風(fēng)格,如下所示:

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.最后加入呼應(yīng)涵數(shù)處理:

void CCreateTreeDlg::OnGetInfoTip(NMHDR* pNMHDR,
                  LRESULT* pResult)
 {
 *pResult = 0;
 NMTVGETINFOTIP* pTVTipInfo = (NMTVGETINFOTIP*)pNMHDR;
 LPARAM itemData = (DWORD) pTVTipInfo->lParam;
 //對(duì)應(yīng)每個(gè)條目的數(shù)據(jù)
 HTREEITEM hItem = pTVTipInfo->hItem;
 CString tip;
 HTREEITEM hRootItem = m_chassisTree.GetRootItem();
 if (hRootItem != pTVTipInfo->hItem)
 {
  tip = "樹結(jié)點(diǎn)的提示";
 }
 else
 {
  tip = "樹根上的提示";
 }
 strcpy(pTVTipInfo->pszText, (LPCTSTR) tip);
}

35. 如何在TreeList中加圖標(biāo)?

 [問題提出]
 請(qǐng)問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));
  
  //設(shè)置圖象列表
  m_list.SetImageList(&cil1,LVSIL_NORMAL);

36. 如何雙擊列表框項(xiàng)啟動(dòng)一個(gè)與文件關(guān)聯(lián)的程序?

有人問我如何雙擊列表框項(xiàng)啟動(dòng)一個(gè)程序?其實(shí)這個(gè)問題很簡單,Windows中有一個(gè)API函數(shù)可以打開任何類型的文件:

ShellExecute(NULL,"open",lpFileName,NULL,NULL,SW_SHOWNORMAL);

參數(shù) lpFileName 是文件的全路徑名。用這個(gè)變量你可以傳遞象“C:\\MyExcelFile.xls”或者“http://www.vckbase.com”啟動(dòng)Excel程序或者瀏覽器程序。如果你只是想獲取與文件關(guān)聯(lián)的程序名,而不是要運(yùn)行程序,那么調(diào)用::FindExecutable就可以了。

37. 如何防止在listbox中添加很多數(shù)據(jù)出現(xiàn)不停的刷新?

 [問題提出]
  在listbox添加很多數(shù)據(jù)的時(shí)候,由于控件不停的刷新,導(dǎo)致出現(xiàn)閃爍,如何解決?
 [解決方法]
  再添加數(shù)據(jù)以前,禁止控件刷新,數(shù)據(jù)添加完畢以后,再刷新一次。
 [程序?qū)崿F(xiàn)](其中:m_ListBox是CListBox的控件類型的變量)
  m_ListBox.LockWindowUpdate();//禁止本listbox刷新。
  for(int i=0;i<9999;i++)
  {
     m_ListBox.AddString("test");
  }//添加數(shù)據(jù)。
  this->RedrawWindow(NULL,NULL,RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE);

38. 如何得到CListBox所選擇項(xiàng)的String?

 [問題提出]
 如何得到CListBox所選擇項(xiàng)的String
 [解決方法]
 用到:CListBox::GetText()
 [程序?qū)崿F(xiàn)]
 CString scInfo;
 pList->GetText( GetCurSel(),scInfo);

39. 用鼠標(biāo)移動(dòng)基于對(duì)話框的無標(biāo)題欄程序的簡單方法

void CVCTestDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
  //一句話解決問題
  SendMessage(WM_SYSCOMMAND,0xF012,0);
  CDialog::OnLButtonDown(nFlags, point);
}

40. 如何改變框?qū)υ捇虼绑w視窗的背景顏色

調(diào)用CWinApp : : SetDialogBkColor可以改變所有應(yīng)用程序的背景顏色。第一個(gè)參數(shù)指定了背景顏色,第二個(gè)參數(shù)指定了文本顏色。下例將應(yīng)用程序?qū)υ捲O(shè)置為藍(lán)色背景和黃色文本。
BOOL CSampleApp : : InitInstance ( )
{

//use blue dialog with yellow text .
SetDialogBkColor (RGB (0, 0, 255 ), RGB ( 255 , 255 , 0 ) ) ;

}
需要重畫對(duì)話(或?qū)υ挼淖涌丶?#xff09;時(shí),Windows向?qū)υ挵l(fā)送消息WM_CTLCOLOR,通常用戶可以讓W(xué)indows選擇繪畫背景的刷子,也可重置該消息指定刷子。下例說明了創(chuàng)建一個(gè)紅色背景對(duì)話的步驟。
首先,給對(duì)話基類增加一人成員變量CBursh :
class CMyFormView : public CFormView
{

private :
CBrush m_ brush ; // background brush

} ;
其次, 在類的構(gòu)造函數(shù)中將刷子初始化為所需要的背景顏色。
CMyFormView : : CMyFormView ( )
{
// Initialize background brush .
m_brush .CreateSolidBrush (RGB ( 0, 0, 255 ) )
}
最后,使用ClassWizard處理WM_CTLCOLOR消息并返回一個(gè)用來繪畫對(duì)話背景的刷子句柄。注意:由于當(dāng)重畫對(duì)話控件時(shí)也要調(diào)用該函數(shù),所以要檢測(cè)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 );
}

?
?2006-10-8 15:55:47??
huzunbo
?
??

?
?
41.如何禁止對(duì)話框關(guān)閉按鈕和浮動(dòng)工具條上的系統(tǒng)菜單

1、禁止對(duì)話框中的關(guān)閉按鈕有二種方法。
第一種方法,用ModiftMenu()涵數(shù)來實(shí)現(xiàn):

CMenu* pMenu = this->GetSystemMenu(FALSE);
pMenu->ModifyMenu(SC_CLOSE,MF_BYCOMMAND | MF_GRAYED );

第二種方法,用EnableMenuItem()涵數(shù)來實(shí)現(xiàn):

CMenu* pMenu = this->GetSystemMenu(FALSE);
pMenu->EnableMenuItem( SC_CLOSE, MF_BYCOMMAND|MF_GRAYED);

2、禁止浮動(dòng)工具條上的系統(tǒng)菜單。
新建一個(gè)CToolBar的派生類CxxToolBar,在新類中的左鍵雙擊(CxxToolBar::OnLButtonDblClk(...))
和左鍵單擊(CxxToolBar:: OnLButtonDown(...))涵數(shù)中分別加入下面代碼既可:
if (IsFloating()) //工具條正在浮動(dòng)狀態(tài)中
{
  CWnd* pMiniFrame;
  CWnd* pDockBar;

  pDockBar = GetParent();
  pMiniFrame = pDockBar->GetParent();

  //去除其上系統(tǒng)菜單
  pMiniFrame->ModifyStyle(WS_SYSMENU, NULL);

  //重繪工具條
  pMiniFrame->ShowWindow(SW_HIDE);
  pMiniFrame->ShowWindow(SW_SHOW);
}

3、禁止窗口最大化按鈕
在PreCreateWindow()涵數(shù)中去掉WS_MAXIMIZEBOX風(fēng)格顯示既可。
BOOL CxxFrameWnd::PreCreateWindow(CREATESTRUCT& cs)
{
  cs.style &= ~WS_MAXIMIZEBOX;
  return CFrameWnd::PreCreateWindow(cs);
}

42.如何拷貝一個(gè)工程的對(duì)話框資源到另一個(gè)工程中?

 有兩種方法可以實(shí)現(xiàn):
 
 1)你可以直接拷貝resource,用VC++以文本的方式或者直接用文本編輯器打開.rc文件,將有關(guān)的片段從
一個(gè)工程拷貝到另一個(gè)工程.你可以通過查找如下字樣的片段(此片段用來定義對(duì)話框資源)來拷貝你要
的部分:
 
 IDD_MYDIALOG_ID DIALOG DISCARDABLE 0, 0, 235, 55
 
 這里的IDD_MYDIALOG_ID是你的對(duì)話框的ID,將到此片段結(jié)尾的部分全拷下來,通常你還要給新的工程
加一個(gè)ID(通過DevStudio的工具或者直接修改resource.h文件).

 2)可以通過DevStudio的copy/paste功能.首先,在編輯器以"auto"模式打開.rc文件,這時(shí)resource
正確的顯示出來.然后,選中要拷貝的對(duì)話框的ID,在Edit菜單里選Copy或者按住Ctrl+C.然后打開目標(biāo)
resource文件,在Edit菜單里選Paste或者按住Ctrl+V.

43.如何實(shí)現(xiàn)點(diǎn)一下對(duì)話框外面的區(qū)域,自動(dòng)隱藏對(duì)話框?

 [問題提出]
  如果想在點(diǎn)擊對(duì)話框外面的地方使得對(duì)話框關(guān)閉,該如何做?

 [解決方法]
  試試下面的代碼,原理是在激活對(duì)話框時(shí),捕獲鼠標(biāo)的動(dòng)作,當(dāng)鼠標(biāo)點(diǎn)擊時(shí)判斷是否點(diǎn)擊在對(duì)話框外,是的話就釋放對(duì)話框.

 [程序?qū)崿F(xiàn)]
  建立名為My的對(duì)話框程序.實(shí)現(xiàn)如下步驟:
  在MyDlg.h中加入:

  class CShowWindow1Dlg : public CDialog
  {
   // Construction
   public:
     int m_cx;
     int m_cy;
     ......
  };

  在MyDlg.cpp中:

  //定義消息映象,處理鼠標(biāo)單擊及激活
  BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
    //{{AFX_MSG_MAP(CMyDlg)
    ON_WM_LBUTTONDOWN()
    ON_WM_ACTIVATE()
    //}}AFX_MSG_MAP
  END_MESSAGE_MAP()

  void CMyDlg::OnLButtonDown(UINT nFlags, CPoint point)
  {
    CRect rect;
    GetClientRect(&rect);
    rect.InflateRect(m_cx, m_cy);
 
    //Release dialog if the user click outside it.
    if(!rect.PtInRect(point))
    {
      EndDialog(IDCANCEL);
    }

    CDialog::OnLButtonDown(nFlags, point);
  }

  void CMyDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
  {
    CDialog::OnActivate(nState, pWndOther, bMinimized);

    if( nState == WA_ACTIVE || nState == WA_CLICKACTIVE)
      SetCapture();
    else
      ReleaseCapture();
  }

  BOOL CMyDlg::OnInitDialog()
  {
    CDialog::OnInitDialog();
    .....
    
    OSVERSIONINFO info;
    memset((char*)&info, 0, sizeof(OSVERSIONINFO));
    info.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
    if(GetVersionEx(&info))
    { //we don't run on Win32s, so check only two values
      if(info.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
      { //On windows 95
       m_cx = GetSystemMetrics(SM_CXFIXEDFRAME);
       m_cy = GetSystemMetrics(SM_CYFIXEDFRAME);
      }
      else
      { //On NT
       m_cx = GetSystemMetrics(SM_CXDLGFRAME);
       m_cy = GetSystemMetrics(SM_CYDLGFRAME);
      }
    }
  }

   說明:
   1)WM_ACTIVATE消息在ClassWizard中沒有,按如下步驟添加,右擊CMyDlg類,選Add Windows Message Handle,接著在Filter for messages available to中選Window,在New Windows messages/events列表中就會(huì)出現(xiàn)WM_ACTIVATE,選中,點(diǎn)擊Add Handler
   2)SM_CXDLGFRAME,SM_CYDLGFRAME  NT中取得有WS_DLGFRAMEstyle風(fēng)格的窗口的高和寬 95中已經(jīng)廢棄而采用SM_CX_FIXEDFRAME和SM_CYFIXEDFRAME

44. 初始化應(yīng)用程序的大小

如果想使應(yīng)用程序界面(文檔)在開始運(yùn)行是按你的尺寸展現(xiàn)在屏幕上,
 添加代碼如下:
 BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
 {
   int xsize=::GetSystemMetrics(SM_CXSCREEN);
   int ysize=::GetSystemMetrics(SM_CYSCREEN);
   cs.cx=xsize*5/10;
   cs.cy=ysize*5/10;
   cs.x=(xsize-cs.cx)/2;
   cs.y=(ysize-cs.cy)/2; 

 }
 其中的5/10是你的初始界面占屏幕的百分比,可以自己修改。如果想使應(yīng)用程序大小固定添加cs.style&=~WS_THICKFRAME;

45. 如何得到視圖指針?

[問題提出]
  現(xiàn)在你有一個(gè)多線程的Demo,你想在多線程里處理視圖指針里的函數(shù),我們給這個(gè)函數(shù)起個(gè)名字:Put();該如何實(shí)現(xiàn)呢?
  //有兩種方法可以實(shí)現(xiàn)你的要求:
  //1)第一種方法:
  //要是多線程不是在App.cpp里出現(xiàn),那么要在多線程的.cpp中加上extern CYourApp theApp;
  //獲得文檔模板:
  POSITION curTemplatePos = theApp.GetFirstDocTemplatePosition();
  CDocTemplate *m_doc=theApp.GetNextDocTemplate(curTemplatePos);

  //獲得文檔:
  curTemplatePos=m_doc->GetFirstDocPosition();
  CYourDoc *m_pdoc=(CA8Doc*)m_doc->GetNextDoc(curTemplatePos);
 
  //獲得視圖:
  curTemplatePos=m_pdoc->GetFirstViewPosition();
  CYourView *m_pview=(CYourView*)m_pdoc->GetNextView(curTemplatePos);

  //調(diào)用視圖函數(shù):
  m_pview->Put();

  //2)第二種方法:
  //獲得窗體指針:
  CMainFrame *pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;

  //獲得與該窗體符合的視圖:
  CYourView *m_pView = (CYourView *) pFrame->GetActiveView();

  //調(diào)用視圖函數(shù):
  m_pView->Put();

46. 如何使我的程序在啟動(dòng)時(shí)不創(chuàng)建一個(gè)新文檔?

[問題]
如何使我的程序在啟動(dòng)時(shí)不創(chuàng)建一個(gè)新文檔?
[解答]
在程序的InitInstance中的ProcessShellCommand函數(shù)之前加入: cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing

47. 如何將標(biāo)題欄上的右鍵菜單屏蔽掉?

 [解決方法]
  右鍵菜單是系統(tǒng)菜單,只要將其WS_SYSMENU的屬性去掉即可.
 [程序?qū)崿F(xiàn)]
  int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  {
     ........
  long style = GetWindowLong(m_hWnd, GWL_STYLE);
     style &= ~WS_SYSMENU;
     SetWindowLong(m_hWnd, GWL_STYLE, style);

  return 0;
  }

48.如何全屏顯示(沒有標(biāo)題,沒有菜單,沒有工具條)

 [解決方法]
  重載CMainFrame的ActivateFrame函數(shù):
  void CMainFrame::ActivateFrame(int nCmdShow)
  {
     CRect cRectdesktop;
     WINDOWPLACEMENT windowplacement;
     ::GetWindowRect(::GetDesktopWindow(),&cRectdesktop);
     ::AdjustWindowRectEx(&cRectdesktop,GetStyle(),TRUE,GetExStyle());
     windowplacement.rcNormalPosition=cRectdesktop;
     windowplacement.showCmd=SW_SHOWNORMAL;
     SetWindowPlacement(&windowplacement);

     CFrameWnd::ActivateFrame(nCmdShow);
  }

49.如何設(shè)置有背景顏色的文本
(1)[解決方法]
  用到了CDC::SetBkMode();
 
 [程序?qū)崿F(xiàn)]
  void CMyView::OnDraw(CDC* pDC)
  {
    CMyDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    CRect rcView;//加這兩句
    GetClientRect(rcView);
    // TODO: add draw code for native data here
    CString str (_T("Perfect Text..."));
    pDC->SetBkMode(TRANSPARENT);
    rcView.OffsetRect (1,1);
    pDC->SetTextColor(RGB (0,0,0));
    pDC->DrawText(str,str.GetLength(),rcView,DT_SINGLELINE | DT_CENTER | DT_VCENTER);
    rcView.OffsetRect(-1,-1);
    pDC->SetTextColor(RGB (255,0,0));
    pDC->DrawText(str,str.GetLength(),rcView,DT_SINGLELINE | DT_CENTER | DT_VCENTER);
  }
(2) 建立名為My的SDI或MDI,并響應(yīng)WM_ERASEBKGND.
  BOOL CMyView::OnEraseBkgnd(CDC* pDC)
  {
   // TODO: Add your message handler code here and/or call default
   CBrush Brush (RGB(114,147,171));
   // Select the brush into the device context .
   CBrush* pOldBrush = pDC->SelectObject(&Brush);
   // Get the area that needs to be erased .
   CRect ViewClip;
   pDC->GetClipBox(&ViewClip);
   //Paint the area.
   pDC->PatBlt(ViewClip.left,ViewClip.top,ViewClip.Width(),ViewClip.Height(),PATCOPY);
   //Unselect brush out of device context .
   pDC->SelectObject (pOldBrush );
   // Return nonzero to half fruther processing .

   return TRUE;
   return CView::OnEraseBkgnd(pDC);
  }
  此方法也適合基類是EditView的SDI或MDI的情況,但是字體的顏色和底色不行.建議用WM_CTLCOLOR.

50.串太長時(shí)往讓其末尾顯示一個(gè)省略號(hào)(在SDI或MDI的View中)

 [問題提出]
  如何在串太長時(shí)往讓其末尾顯示一個(gè)省略號(hào)(在SDI或MDI的View中)?
 [程序?qū)崿F(xiàn)]
  建立名為My的SDI或MDI工程.
  void CMyView::OnDraw(CDC* pDC)
  {
    CMyDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here
    pDC->DrawText(CString("It's a long string,so we will add a '...' at the end."),CRect (110, 110, 180, 130),DT_LEFT | DT_END_ELLIPSIS);
    //Add ellpsis to middle of string if it does not fit
    pDC->DrawText(CString("It's a long string,so we will add a '...' at the end."),CRect (110, 140, 300, 160),DT_LEFT | DT_PATH_ELLIPSIS);
  }

?
?2006-10-8 15:56:20??
huzunbo
?
??

?
?
51. 如何獲得其他程序的圖標(biāo),并顯示在View中

 [問題提出]
 有的時(shí)候,如:類資源管理器會(huì)遇到獲得程序圖標(biāo)并顯示的操作,如何實(shí)現(xiàn)呢?
 [解決方法]
 SDK函數(shù)SHGetFileInfo來獲得有關(guān)文件的很多信息:如大小圖標(biāo),屬性,類型等.
 [程序?qū)崿F(xiàn)]
 建立名為My的SDI工程.在OnPaint()函數(shù)中加入:
 void CMyView::OnPaint()
 {
  CPaintDC dc(this); // device context for painting
  HICON hIcon=:: ExtractIcon(AfxGetInstanceHandle(),_T("NotePad.exe"),0);
  if (hIcon && hIcon!=(HICON)-1)
  dc.DrawIcon(10,10,hIcon);

  // TODO: Add your message handler code here
  // Do not call CView::OnPaint() for painting messages
 }
 說明:_T("NotePad.exe")指的是要獲得什么程序的圖標(biāo).
 或者在OnDraw()中(此時(shí)必須保證沒有OnPaint()函數(shù),想想為何?)
 void CMyView::OnDraw(CDC* pDC)
 {
  CMyDoc* pDoc = GetDocument();
  ASSERT_VALID(pDoc);
  // TODO: add draw code for native data here
  HICON hIcon=:: ExtractIcon(AfxGetInstanceHandle(),_T("NotePad.exe"),0);
  if (hIcon &&hIcon!=(HICON)-1)
  pDC->DrawIcon(10,10,hIcon);
 }

52 .RichEdit
在Dialog(FormView中打開)中加入CRichEdit控件后,這個(gè)dialog 為什么打不開如何處理?
 [解決方法]
 在函數(shù):InitInstance的第一句加入AfxInitRichEdit();

53. 如何使FormView中顯示dialog時(shí),不是凹的?

 [問題提出]
 為什么FormView中顯示dialog時(shí),是凹的,能不能不這樣
 [解決方法]
 在Dialog的屬性中:
  增加屬性WS_BORDER  或者 WS_EX_WINDOWEDGE
 用程序?qū)崿F(xiàn):
 pView->ModifyStyle(,WS_BORDER) 或者pView->ModifyStyleEx(,WS_EX_WINDOWEDGE )

54. 如何改變窗口標(biāo)題?

 [問題提出]
  在應(yīng)用程序的不同運(yùn)行時(shí)期,要反映當(dāng)前狀態(tài)往往會(huì)修改應(yīng)用程序標(biāo)題.

 [解決方法]
  在MFC類庫中提供了CWnd::SetWindowText函數(shù),通過該函數(shù)可以改變?nèi)魏未绑w(包括控件)的標(biāo)題.
  改變主窗體的標(biāo)題:
  CWnd *m_pMainWnd;
  m_pMainWnd=AfxGetMainWnd();
  m_pMainWnd->SetWindowText(_T("改變標(biāo)題"));
  當(dāng)改變多視MDI的子窗口的標(biāo)題時(shí),用:
  GetParentFrame()->SetWindowText(_T("MDI Child改變標(biāo)題"));
  當(dāng)改變按鈕的標(biāo)題時(shí)(假設(shè)按鈕的ID=IDC_BUTTON1):
  GetDlgItem(IDC_BUTTON1)->SetWindowText(_T("Button 改變標(biāo)題"));
  運(yùn)行看看.

55.圖標(biāo)透明

(1).Windows中的圖標(biāo)其實(shí)是有兩個(gè)圖像組成的,其中一個(gè)用于與它要顯示的位置的圖像做“AND”操作,另一個(gè)作“XOR”操作。
透明:用“白色”AND,用“黑色”XOR
反色:用“白色”AND,用“白色”XOR
正常色:用“黑色”AND,用正常顏色XOR.
(2). WIN9X中好像是對(duì)像素的操作實(shí)現(xiàn)透明的
WIN2K中就有API直接實(shí)現(xiàn)透明了!
WIN2K中
GetWindowLong
SetWindowLong
SetLayeredWindowAttributes
三個(gè)API就可以實(shí)現(xiàn)透明了!
(3)
::DrawIconEx(pDC->GetSafeHdc(),point.x,point.y,icon,icosize,icosize,0,NULL,DI_NORMAL);

56.ASSERT()是干什么用的

ASSERT()是一個(gè)調(diào)試程序時(shí)經(jīng)常使用的宏,在程序運(yùn)行時(shí)它計(jì)算括號(hào)內(nèi)的表達(dá)式,如果表達(dá)式為FALSE (0), 程序?qū)?bào)告錯(cuò)誤,并終止執(zhí)行。如果表達(dá)式不為0,則繼續(xù)執(zhí)行后面的語句。這個(gè)宏通常原來判斷程序中是否出現(xiàn)了明顯非法的數(shù)據(jù),如果出現(xiàn)了終止程序以免導(dǎo)致嚴(yán)重后果,同時(shí)也便于查找錯(cuò)誤。例如,變量n在程序中不應(yīng)該為0,如果為0可能導(dǎo)致錯(cuò)誤,你可以這樣寫程序:
  ......
  ASSERT( n != 0);
  k = 10/ n;
  ......
  ASSERT只有在Debug版本中才有效,如果編譯為Release版本則被忽略。
  assert()的功能類似,它是ANSI C標(biāo)準(zhǔn)中規(guī)定的函數(shù),它與ASSERT的一個(gè)重要區(qū)別是可以用在Release版本中。

56. 將RADIO控件初始狀態(tài)設(shè)置成為選中

1、"在OnInitialDialog中用CButton::CheckRadioButton(...)
2、"在OnInitialDialog中用CButton::SetCheck(...)
3、"關(guān)聯(lián)一個(gè)整型值,在構(gòu)造函數(shù)中設(shè)為0。

57.獲得視圖

CFrameWnd* pFrameWnd = (CFrameWnd*)theApp.GetMainWnd();
CMyView* pView = (CMyView*)pFrameWnd->GetActiveView();

58.如何得到屏幕的真實(shí)尺寸

[問題提出]
我的屏幕是1024*800,如何得到屏幕的真實(shí)大小,我用GetSystemMetrics(SM_CYFULLSCREEN)得到的高度總是小于800
[問題解答]
GetSystemMetrics(SM_CYFULLSCREEN)得到的只是屏幕用戶區(qū)的大小。要得到屏幕的真實(shí)大小需要使用
GetDeviceCaps函數(shù),該API函數(shù)原型是這樣的:

int GetDeviceCaps(
 HDC hdc,   // handle to DC
 int nIndex  // index of capability
);
///得到屏幕尺寸的代碼如下
void CMyDlg::OnPaint()
{
  CPaintDC dc(this);
  int cx = ::GetDeviceCaps(dc.m_hDC,HORZRES);///得到寬度
  int cy = ::GetDeviceCaps(dc.m_hDC,VERTRES);///得到高度
  CDialog::OnPaint();

59. 修改標(biāo)題欄高度

NONCLIENTMETRICS nm
調(diào)用SystemParametersInfo(SPI_GETNONCLIENTMETRICS,sizeof(nm),&nm,0)
重設(shè)SystemParametersInfo(SPI_SETNONCLIENTMETRICS,sizeof(nm),&nm,0)

60. 如何實(shí)現(xiàn)“氣球式”工具提示。

本程序介紹一個(gè)與CToolTipCtrl相似的類CTooolTipWnd。
使用該類的方法如下:
1. 增加ToolTipWnd.cpp到工程文件。
2. 在頭文件中添加#include "ToolTipWnd.h" 。 
3. 在類聲明中添加:
CToolTipWnd m_BalloonToolTip;
4. 在OnInitDialog(對(duì)話框)或OnInitialUpdate(表單視)中添加下面代碼:
  m_BalloonToolTip.Create(this);
  m_BalloonToolTip.AddTool(GetDlgItem(), , [text color]);
eg.
  m_BalloonToolTip.AddTool(GetDlgItem(IDC_EDIT1),"Tooltip", RGB(255,0,0));
  第三個(gè)參數(shù)為可選,缺省為RGB(0, 0, 0)。缺省文本顏色可以用SetDefTextColor進(jìn)行設(shè)置。
4. 重載PreTranslateMessage并添加下面代碼:
  if(m_BalloonToolTip) 
    m_BalloonToolTip.RelayEvent(pMsg);

?
?2006-10-8 15:56:44??
huzunbo
?
??

?
?
61. dlg 上建立View的方法:

OnInitDialog()
{
 CDialog:;OnInitDialog();

CRect rectWindows;
GetWinodwRect(&rectWindows);
CRuntimeClass *pViewClass=RUNTIME_CLASS(CXXXView);
CCreateContext *pContext=new CCreateContext;
pContext->m_pCurrentDoc=NULL;
pContext->m_pCurrentFrame=NULL;
pContext->m_pLastView=NULL;
pContext->m_pNewDocTemplate=NULL;
pContext->m_pNewViewClass=pViewClass;

CWnd *pWnd=DYNAMIC_DOWNCAST(CWnd,pviewClass->CreateObject());
pWnd->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW,CRect(0,0,0,0),this,pContext);
delete pContext;
CXXXView *pView=DYUNAMIC_DOWNCAST(CXXXView,pWnd);
...............
}

62. 窗口最大化、最小化及關(guān)閉的消息是什么?如何截獲?

最大化、最小化將發(fā)送WM_SYSCOMMAND消息。要處理該消息,可以這么做:
  1、在Form的頭文件中添加:
   void __fastcall RestrictMinimizeMaximize(TMessage &Msg);
  
   BEGIN_MESSAGE_MAP
   MESSAGE_HANDLER(WM_SYSCOMMAND, TMessage, RestrictMinimizeMaximize)
   END_MESSAGE_MAP(TForm)
  2、在Form的單元文件中添加:
  
   void __fastcall TForm1::RestrictMinimizeMaximize(TMessage& Msg)
   {
   if (Msg.WParam == SC_MINIMIZE)
   {
   //catches minimize...
   }
   else if (Msg.WParam == SC_MAXIMIZE)
   {
   //catches maximize...
   }
   TForm::Dispatch(&Msg);
   // or "else TForm::Dispatch(&Msg)" to trap
   }
  關(guān)閉窗口的消息為WM_CLOSE,C++Builder提供了OnClose事件。

63. 如何遍歷整個(gè)目錄樹查找文件
  
在應(yīng)用程序的開發(fā)過程中,會(huì)遇到如何查找某一文件以確定此文件路徑的問題。利用CFileFind類可以比較方便地在當(dāng)前目錄下進(jìn)行文件查找,但卻不能對(duì)其子目錄中的文件進(jìn)行搜尋。而實(shí)際應(yīng)用中往往需要對(duì)某一整個(gè)目錄樹,甚至是整個(gè)C盤或D盤驅(qū)動(dòng)器進(jìn)行文件搜尋。通過實(shí)踐,我們?cè)赩isual C++ 6.0中編程實(shí)現(xiàn)了如何遍歷任意目錄樹,以查找某一特定的文件。
  在下面的具體陳述中可以看到,在確定要查找的文件名和要進(jìn)行搜索的目錄的名稱后,將調(diào)用函數(shù)Search_Directory進(jìn)行文件的查找。首先依次查找當(dāng)前目錄下的每一個(gè)實(shí)體(文件或是子目錄),如果是某一子目錄,則進(jìn)入該子目錄并遞歸調(diào)用函數(shù)Search_Dirctory進(jìn)行查找,查找完畢之后, 再返回上一級(jí)目錄;如果不是子目錄而是某一文件,則判斷其是否就是我們要查找的文件,如果是則輸出其完整的文件路徑。這樣,通過Search_Directory函數(shù)的反復(fù)遞歸調(diào)用,就可以實(shí)現(xiàn)對(duì)整個(gè)目錄,包括子目錄的遍歷搜索。下面將舉例詳細(xì)講述如何在VC++中編程實(shí)現(xiàn)在整個(gè)目錄樹中的文件查找。
  1. 在Visual C++ 6.0(VC++ 5.0與之類似)中用默認(rèn)方式創(chuàng)建了一基于對(duì)話框的應(yīng)用程序Search。在主窗口對(duì)話框上放置一命令按鈕,其Caption為“Search File”,ID為ID_BUTTON_SEARCH。單擊此按鈕將完成文件的查找工作。
  2. 利用ClassWizard為“Search File”按鈕的BN_CLICKED 事件添加處理函數(shù)OnButtonSearch,代碼如下:

#include 〈direct.h〉
#include 〈io.h〉
void CSearchDlg::OnButtonSearch()
{
  // TODO: Add your control notification handler code here
 
  char szFilename[80];
  // 字符串 szFilename 表示要查找的文件名

  strcpy(szFilename,"Mytext.txt");

  _chdir("d:\\"); // 進(jìn)入要查找的路徑(也可為某一具體的目錄)
  // 查找文件, 如果查到則顯示文件的路徑全名
  Search_Directory(szFilename);
  // 為CSearchDlg類的一成員函數(shù)
  MessageBox(″查找文件完畢!″);
  // 顯示查找完畢的信息
}


  3. 在CSearchDlg類中增加成員函數(shù)Search_Directory,它將完成具體的文件查找工作,代碼如下:
void CSearchDlg::Search_Directory(char* szFilename)
{
  long handle;
  struct _finddata_t filestruct;
  //表示文件(或目錄)的信息
  char path_search[_MAX_PATH];
  //表示查找到的路徑結(jié)果
  // 開始查找工作, 找到當(dāng)前目錄下的第一個(gè)實(shí)體(文件或子目錄),
  // "*"表示查找任何的文件或子目錄, filestruct為查找結(jié)果
  handle = _findfirst("*", &filestruct);
  // 如果handle為-1, 表示當(dāng)前目錄為空, 則結(jié)束查找而返回
  if((handle == -1)) return;
  // 檢查找到的第一個(gè)實(shí)體是否是一個(gè)目錄(filestruct.name為其名稱)
  if( ::GetFileAttributes(filestruct.name) & FILE_ATTRIBUTE_DIRECTORY )
  {
   // 如果是目錄, 則進(jìn)入該目錄并遞歸調(diào)用函數(shù)Search_Dirctory進(jìn)行查找,
   // 注意: 如果目錄名的首字符為'.'(即為"."或".."), 則不用進(jìn)行查找
   if( filestruct.name[0] != '.' )
   {
     _chdir(filestruct.name);
     Search_Directory(szFilename);
     // 查找完畢之后, 返回上一級(jí)目錄
     _chdir("..");
   }
  }
  else // 如果第一個(gè)實(shí)體不是目錄, 則檢查是否是要查找的文件
  {
   // stricmp對(duì)兩字符串進(jìn)行小寫形式的對(duì)比, 返回為0表示完全一致
   if( !stricmp(filestruct.name, szFilename) )
   {
     // 先獲得當(dāng)前工作目錄的全路徑
     _getcwd(path_search,_MAX_PATH);
     // 再獲得文件的完整的路徑名(包含文件的名稱)
     strcat(path_search,"\\");
     strcat(path_search,filestruct.name);
     MessageBox(path_search); //輸出顯示
   }
  }
  // 繼續(xù)對(duì)當(dāng)前目錄中的下一個(gè)子目錄或文件進(jìn)行與上面同樣的查找
  while(!(_findnext(handle,&filestruct)))
  {
   if( ::GetFileAttributes(filestruct.name) & FILE_ATTRIBUTE_DIRECTORY )
   {
     if(*filestruct.name != '.')
     {
      _chdir(filestruct.name);
      Search_Directory(szFilename);
      _chdir("..");
     }
   }
   else
   {
     if(!stricmp(filestruct.name,szFilename))
     {
      _getcwd(path_search,_MAX_PATH);
      strcat(path_search,"\\");
      strcat(path_search,filestruct.name);
      MessageBox(path_search);
     }
   }
  }
  _findclose(handle);
  // 最后結(jié)束整個(gè)查找工作
}
  這樣我們就可以對(duì)整個(gè)目錄進(jìn)行遍歷搜索,查找某一特定的文件,并輸出顯示其完整的文件路徑。以上的程序在Visual C++ 6.0中已調(diào)試通過。

64. Richedit control的設(shè)置背景圖片辦法

1:繼承CRichEditCtrl::OnEraseBkgnd(CDC* pDC)消息事件中,給Richedit控件繪制上背景圖片:m_bmpBackground.DrawDIB(pDC, 0, 0, rc.Width(), rc.Height());當(dāng)然也可以通過subclass richedit window之后,在回調(diào)函數(shù)中處理WM_ERASEBKGND消息。
2:設(shè)置了Richedit控件的透明屬性;
3:依照kenwhale所說的,Hook了GDI32.DLL中的ExtTextOut函數(shù),將RichEdit的text-output options去除ETO_OPAQUE style
。綜上所述,即可實(shí)現(xiàn)RichEdit控件的背景圖片效果。
據(jù)此,我還實(shí)現(xiàn)了RichEdit控件背景繪制AVI動(dòng)畫效果。

65. MFC程序中如何創(chuàng)建多級(jí)目錄

BOOL mkdirEx(const char* lpPath)
{
CString pathname = lpPath;
if(pathname.Right(1) != "\")
pathname += "\" ;
int end = pathname.ReverseFind('\');
int pt = pathname.Find('\');
if (pathname[pt-1] == ':')
pt = pathname.Find('\', pt+1);
CString path;
while(pt != -1 && pt<=end)
{
path = pathname.Left(pt+1);
if(_access(path, 0) == -1)
_mkdir(path);
pt = pathname.Find('\', pt+1);
}
return true;
}

66. 解決外部符號(hào)錯(cuò)誤:_main,_WinMain@16,__beginthreadex

在創(chuàng)建MFC項(xiàng)目時(shí), 不使用MFC AppWizard向?qū)? 如果沒有設(shè)置好項(xiàng)目參數(shù), 就會(huì)在編譯時(shí)產(chǎn)生很多連接錯(cuò)誤, 如error LNK2001錯(cuò)誤, 典型的錯(cuò)誤提示有:
libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol
_WinMain@16
msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
下面介紹解決的方法:
1). Windows子系統(tǒng)設(shè)置錯(cuò)誤, 提示:
libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Windows項(xiàng)目要使用Windows子系統(tǒng), 而不是Console, 可以這樣設(shè)置:
[Project] --> [Settings] --> 選擇"Link"屬性頁,
在Project Options中將/subsystem:console改成/subsystem:windows
2). Console子系統(tǒng)設(shè)置錯(cuò)誤, 提示:
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol
_WinMain@16
控制臺(tái)項(xiàng)目要使用Console子系統(tǒng), 而不是Windows, 設(shè)置:
[Project] --> [Settings] --> 選擇"Link"屬性頁,
在Project Options中將/subsystem:windows改成/subsystem:console
3). 程序入口設(shè)置錯(cuò)誤, 提示:
msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol
_WinMain@16
通常, MFC項(xiàng)目的程序入口函數(shù)是WinMain, 如果編譯項(xiàng)目的Unicode版本, 程序入口必須改為wWinMainCRTStartup, 所以需要重新設(shè)置程序入口:
[Project] --> [Settings] --> 選擇"C/C++"屬性頁,
在Category中選擇Output,
再在Entry-point symbol中填入wWinMainCRTStartup, 即可
4). 線程運(yùn)行時(shí)庫設(shè)置錯(cuò)誤, 提示:
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
這是因?yàn)镸FC要使用多線程時(shí)庫, 需要更改設(shè)置:
[Project] --> [Settings] --> 選擇"C/C++"屬性頁,
在Category中選擇Code Generation,
再在Use run-time library中選擇Debug Multithreaded或者multithreaded
其中,
Single-Threaded單線程靜態(tài)鏈接庫(release版本)
Multithreaded多線程靜態(tài)鏈接庫(release版本)
multithreaded DLL多線程動(dòng)態(tài)鏈接庫(release版本)
Debug Single-Threaded單線程靜態(tài)鏈接庫(debug版本)
Debug Multithreaded多線程靜態(tài)鏈接庫(debug版本)
Debug Multithreaded DLL多線程動(dòng)態(tài)鏈接庫(debug版本)
單線程: 不需要多線程調(diào)用時(shí), 多用在DOS環(huán)境下
多線程: 可以并發(fā)運(yùn)行
靜態(tài)庫: 直接將庫與程序Link, 可以脫離MFC庫運(yùn)行
動(dòng)態(tài)庫: 需要相應(yīng)的DLL動(dòng)態(tài)庫, 程序才能運(yùn)行
release版本: 正式發(fā)布時(shí)使用
debug版本: 調(diào)試階段使用
67. 創(chuàng)建包含多個(gè)子目錄的目錄
void CreateAllDirectories(CString strDir)
{
//remove ending / if exists
if(strDir.Right(1)=="\\")
 strDir=strDir.Left(strDir.GetLength()-1);

// base case . . .if directory exists
if(GetFileAttributes(strDir)!=-1)
 return;

// recursive call, one less directory
int nFound = strDir.ReverseFind('\\');
CreateAllDirectories(strDir.Left(nFound));

// actual work
CreateDirectory(strDir,NULL);
}
68. ReverseFind()
#include <STDIO.H>
#include <AFX.H>
int main()
{
  CString s;
  s.Format("abcdefghijk");
  int nPos = s.ReverseFind('a');
  printf("nPos is %d\n",nPos);
  return 0;
}
其中,'a'對(duì)應(yīng)的nPos是0,'h'對(duì)應(yīng)的nPos是7,以此類推。但是:s.ReverseFind('a')和s.Find('a')的結(jié)果是一樣的。
問題是:ReverseFind() 和 Find() 有什么區(qū)別呢:
對(duì)于ReverseFind(),查找順序是從后往前,找到后的nPos是按前后順序排列的。
而Find()是從前往后查的,找到后的nPos也是按前后順序排列的。
69. MDI中如何只屏蔽掉子框架的右上角的關(guān)閉按鈕
int CChildFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
  if (CMDIChildWnd::OnCreate(lpCreateStruct) == -1)
    return -1;
。。。
  CMenu* pSysMenu = GetSystemMenu(FALSE);
  pSysMenu->EnableMenuItem(SC_CLOSE,MF_BYCOMMAND |MF_DISABLED|MF_GRAYED);
  return 0;
}
70. 程序如何刪除自己
/
 
int WINAPI WinMain(HINSTANCE h, HINSTANCE b, LPSTR psz, int n) {
 
// Is this the Original EXE or the clone EXE?
// If the command-line 1 argument, this is the Original EXE
// If the command-line >1 argument, this is the clone EXE
 
if (__argc == 1) {
 
// Original EXE: Spawn clone EXE to delete this EXE
// Copy this EXEcutable image into the user''s temp directory
 
TCHAR szPathOrig[_MAX_PATH], szPathClone[_MAX_PATH];
GetModuleFileName(NULL, szPathOrig, _MAX_PATH);
GetTempPath(_MAX_PATH, szPathClone);
GetTempFileName(szPathClone, __TEXT("Del"), 0, szPathClone);
CopyFile(szPathOrig, szPathClone, FALSE);
 
//***注意了***:
// Open the clone EXE using FILE_FLAG_DELETE_ON_CLOSE
HANDLE hfile = CreateFile(szPathClone, 0, FILE_SHARE_READ, NULL, OPEN_EXISTI
NG, FILE_FLAG_DELETE_ON_CLOSE, NULL);
 
// Spawn the clone EXE passing it our EXE''s process handle
// and the full path name to the Original EXE file.
TCHAR szCmdLine[512];
HANDLE hProcessOrig = OpenProcess(SYNCHRONIZE, TRUE, GetCurrentProcessId());

wsprintf(szCmdLine, __TEXT("%s %d \"%s\""), szPathClone, hProcessOrig, szPat
hOrig);
STARTUPINFO si;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
PROCESS_INFORMATION pi;
CreateProcess(NULL, szCmdLine, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi);
CloseHandle(hProcessOrig);
CloseHandle(hfile);
 
// This original process can now terminate.
} else {
// Clone EXE: When original EXE terminates, delete it
HANDLE hProcessOrig = (HANDLE) _ttoi(__targv[1]);
WaitForSingleObject(hProcessOrig, INFINITE);
CloseHandle(hProcessOrig);
DeleteFile(__targv[2]);
// Insert code here to remove the subdirectory too (if desired).
 
// The system will delete the clone EXE automatically
// because it was opened with FILE_FLAG_DELETE_ON_CLOSE
}
return(0);
}
  這一段程序思路很簡單:不是不能在運(yùn)行時(shí)直接刪除本身嗎?好,那么程序先復(fù)制(CLONE)一個(gè)自己,用復(fù)制品起動(dòng)另一個(gè)進(jìn)程,然后自己結(jié)束運(yùn)行,則原來的EXE文件不被系統(tǒng)保護(hù).這時(shí)由新進(jìn)程作為殺手刪除原來的EXE文件,并且繼續(xù)完成程序其他的功能。

  新進(jìn)程在運(yùn)行結(jié)束后,復(fù)制品被自動(dòng)刪除。這又是值得介紹的一個(gè)把戲了,注意:

// Open the clone EXE using FILE_FLAG_DELETE_ON_CLOSE
HANDLE hfile = CreateFile(szPathClone, 0, FILE_SHARE_READ, NULL,OPEN_EXISTIN
G, FILE_FLAG_DELETE_ON_CLOSE, NULL);
  這里面的FILE_FLAG_DELETE_ON_CLOSE標(biāo)志,這個(gè)標(biāo)志是告訴操作系統(tǒng),當(dāng)和這個(gè)文件相關(guān)的所有句柄都被關(guān)閉之后(包括上面這個(gè)CREATEFILE創(chuàng)建的句炳),就把這個(gè)文件刪除。幾乎所有的臨時(shí)文件在創(chuàng)建時(shí),都指明了這個(gè)標(biāo)志。另外要注意的是:在復(fù)制品進(jìn)程對(duì)原始程序操刀之前,應(yīng)該等待原進(jìn)程退出.在這里用的是進(jìn)程同步技術(shù).用HANDLE hProcessOrig = OpenProcess(SYNCHRONIZE, TRUE,GetCurrentProcessId());得到原進(jìn)程句柄.SYNCHRONICE標(biāo)志在NT下有效,作用是使OpenProcess得到的句柄可以做為同步對(duì)象.復(fù)制品進(jìn)程用WaitForSingleObject函數(shù)進(jìn)行同步,然后一個(gè)DeleteFile,以及進(jìn)行其它銷毀證據(jù)(比如刪目錄)的工作,一切就完事了。
 
  程序是基于CONSOLE的,通過傳入的參數(shù)確定是原始的進(jìn)程還是復(fù)制品新進(jìn)程,并且得到需要操作的目標(biāo)文件的信息(主要是路徑),復(fù)制品放在系統(tǒng)的TEMP目錄(GetTempPath得到),你也可以隨便找個(gè)你認(rèn)為安全的地方(比如:WINDOWS\SYSTEM32等等)。這里面沒有甚么深的技術(shù).再看其他的一些實(shí)現(xiàn)刪除自己的例子,比如說在進(jìn)程退出前,用fwrite等方法輸出一個(gè).BAT文件,在里面寫幾句DEL,然后WINEXEC一下這個(gè)BAT文件即可.玩兒過DOS的蟲蟲大多都會(huì)。

?
71. 隱藏標(biāo)題欄和菜單欄
隱藏標(biāo)題欄 ModifyStyle(WS_CAPTION,0)
隱藏菜單欄 SetMenu(NULL)
72. InflateRect
InflateRect這個(gè)函數(shù)用于增大或減小一個(gè)矩形的大小.
如m_graphRect.InflateRect(-70, -30, -30, -50);
將矩形左邊坐標(biāo)加70,上面加30,右邊減30,下面減50。
73. 怎么讓無模式對(duì)話框顯示在主窗口后面
要解決這個(gè)問題的關(guān)鍵在于CDialog的Create并不能建立一個(gè)無屬主的窗口.必須用另外方式建窗口. 
  
 比如你的對(duì)話框類叫CDlgNoOwner,在CMainFrame中加一個(gè)CDlgNoOwner類的成員變量, 
 彈出這個(gè)對(duì)話框的消息處理函數(shù)為 
  
 void  CMainFrame::OnNoowner()  
 { 
CDlgNoOwner  *m_dlgTest=new  CDlgNoOwner(this); 
 HWND  hwndDlg=::CreateDialog(AfxGetInstanceHandle(),MAKEINTRESOURCE(CDlgNoOwner::IDD),NULL/*owner*/,NULL/*dlgproc*/); 
 //注意此處DLGPROC為NULL,并不要緊,因?yàn)榻酉乱猻ubclass啦 
 m_dlgTest->SubclassWindow  (hwndDlg);//掛接到成員變量! 
 m_dlgTest->ShowWindow  (SW_SHOW); 
 //這時(shí)可以看到一個(gè)"自由"的對(duì)話框彈出,和你的主窗口是平起平坐的. 
 } 
  
 當(dāng)然不要忘了在對(duì)話框關(guān)閉時(shí)DestroyWindow()..那都是在對(duì)話框類中的標(biāo)準(zhǔn)處理了.
74. 隱藏窗口(子窗口沒有焦點(diǎn)時(shí))

在程序啟動(dòng)時(shí)  InitDialog  中使用  SetWindowPos  將窗體設(shè)置到屏幕以外
然后再隱藏
1.在OnInitDialog()函數(shù)里設(shè)置定時(shí)器:(WINDOWS  API里面響應(yīng)消息WM_INITDIALOG) 
  
 SetTimer(1,  1,  NULL); 
  
 2.添加處理WM_TIMER的消息處理函數(shù)OnTimer,添加代碼: 
  
 if(nIDEvent  ==  1) 
  
 { 
  
 DeleteTimer(1); 
  
 ShowWindow(SW_HIDE); 
  
 } 
75.修改視圖背景
How do I change the background color of a view?

To change the background color for a CView, CFrameWnd, or CWnd object, process the WM_ERASEBKGND message. The following code shows how:

BOOL CSampleView::OnEraseBkgnd(CDC* pDC)
{
  // Set brush to desired background color.
  CBrush backBrush(RGB(255, 128, 128));
  // Save old brush.
  CBrush* pOldBrush = pDC->SelectObject(&backBrush);
  CRect rect;
  pDC->GetClipBox(&rect);   // Erase the area needed.
  pDC->PatBlt(rect.left, rect.top, rect.Width(),
  rect.Height(), PATCOPY);
  pDC->SelectObject(pOldBrush);
  return TRUE;
}

I solved the problem like this:

HBRUSH dlgtest::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
  switch (nCtlColor)
  {
    case CTLCOLOR_BTN:
    case CTLCOLOR_STATIC:
    {
      pDC->SetBkMode(TRANSPARENT);
    }
    case CTLCOLOR_DLG:
    {
      CBrush*   back_brush;
      COLORREF  color;
      color = (COLORREF) GetSysColor(COLOR_BTNFACE);
      back_brush = new CBrush(color);
      return (HBRUSH) (back_brush->m_hObject);
    }
  }
  return(CFormView::OnCtlColor(pDC, pWnd, nCtlColor));
}
76. 如何實(shí)現(xiàn)點(diǎn)擊對(duì)話框外的地方使對(duì)話框到主窗口的后面
只能將桌面做為父窗口
pMDlg = new CMDlg;
pMDlg->Create(IDD_M_DIALOG,CWnd::GetDesktopWindow()/* 設(shè)置父窗口 */);
pMDlg->ShowWindow(SW_SHOW);
然后在任務(wù)欄里隱藏對(duì)話框程序
如何讓對(duì)話框應(yīng)用程序在在任務(wù)欄上不出現(xiàn),并且不隱藏窗口。
[解決方法]
  把對(duì)話框的擴(kuò)展屬性修改成為WS_EX_TOOLWINDOW。
[程序?qū)崿F(xiàn)]
  把對(duì)話框的屬性設(shè)置成為toolwindow,然后在需要的地方執(zhí)行本代碼。
  DWORD Style = ::GetWindowLong(AfxGetMainWnd()->m_hWnd,GWL_EXSTYLE);
  Style = WS_EX_TOOLWINDOW ;
  AfxGetMainWnd()->ShowWindow(FALSE);
  ::SetWindowLong(AfxGetMainWnd()->m_hWnd,GWL_EXSTYLE,Style);
  AfxGetMainWnd()->ShowWindow(TRUE);

?

77. 想在程序一啟動(dòng)時(shí)就自動(dòng)關(guān)閉窗口,不在任務(wù)欄里顯示
用CTRL+W打開ClassWizard;
點(diǎn)擊Class Info頁,類名是工程名Dlg,
再在左下方的"Filter"中選擇"Windows";
回到Message Maps頁,就可以看到消息中有WM_WINDOWPOSCHANGING,
加入代碼,如上所示.
這樣運(yùn)行*.EXE,不但看不到主界面,任務(wù)欄也沒有,就是任務(wù)管理器中的"應(yīng)用程序"中也不列出,那該如何關(guān)閉它?
在任務(wù)管理器的"進(jìn)程"中可以找到它,這是黑客程序常用的方法.
如果需要的話,連"進(jìn)程"中也看不到.這樣要終止它就是問題了.
78.修改打印預(yù)覽的ToolBar

為AFX_IDD_PREVIEW_TOOLBAR這個(gè)ID創(chuàng)建一個(gè)DialogBar。則系統(tǒng)就會(huì)用新創(chuàng)建的DialogBar代替系統(tǒng)默認(rèn)的那個(gè)

79. 如何實(shí)現(xiàn)SDI與MDI的轉(zhuǎn)換?

我想將一個(gè)編好的SDI應(yīng)用程序轉(zhuǎn)換為MDI,很明顯要有多處的改變。
你可以這樣做:建立一個(gè)繼承于CMDIChidWnd的類,不防設(shè)為CChldFrm.在CWinApp中作如下變化。

InitInstance()
{
. ...
  //instead of adding CSingleDocTemplate
  // Add CMultiDocTemplate.
  pDocTemplate = new CMultiDocTemplate(
      IDR_MAINFRAME,
      RUNTIME_CLASS(CSDIDoc),
      RUNTIME_CLASS(CChldFrm),
// For Main MDI Frame change this frame window from
// CFrameWnd derivative ( i.e. CMainFrame )
// to your CMDIChildWnd derived CChldFrm.
      RUNTIME_CLASS(CSDIView));
/// After this it is required to create the main frame window
// which will contain all the child windows. Now this window is
// what was initially frame window for SDI.
  CMainFrame* pMainFrame = new CMainFrame;
  if (!pMainFrame->LoadFrame(IDR_MAINFRAME))
      return FALSE;
   m_pMainWnd = pMainFrame;
.....
}
在從CMDIFrameWnd中繼承的類CMainFrame代替CFramWnd后,所有的類都將從CMDIFrame繼承,而不是CFrameWnd,編譯運(yùn)行后你就會(huì)發(fā)現(xiàn)程序已經(jīng)從SDI變換到MDI。
注意:在CMainFram中必須將構(gòu)造函數(shù)從private改為public.否則會(huì)出錯(cuò)。

80. CDC中的豎排文本?

在OnDraw成員函數(shù)中我想讓文本豎直對(duì)齊,但CDC類似乎不支持該處理
方法一:如果你的豎直對(duì)齊是指旋轉(zhuǎn)文本的話,下面的代碼會(huì)對(duì)你有幫助:該代碼檢查一個(gè)Check box控制,查看文本是否需要旋轉(zhuǎn).
// m_pcfYTitle is a CFont* to the selected font.
// m_bTotateYTitle is a bool (==TRUE if rotated)
void CPage1::OnRotateytitle()
{
LOGFONT lgf;
m_pcfYTitle->GetLogFont(&lgf);
m_bRotateYTitle=
    ((CButton*)GetDlgItem(IDC_ROTATEYTITLE))->GetCheck()>0;
// escapement is reckoned clockwise in 1/10ths of a degree:
lgf.lfEscapement=-(m_bRotateYTitle*900);
m_pcfYTitle->DeleteObject();
m_pcfYTitle->CreateFontIndirect(&lgf);
DrawSampleChart();
}
注意如果你從CFontDialog中選擇了不同的字體,你應(yīng)該自己設(shè)定LOGFONT的lfEscapement成員.將初始化后的lfEscapement值傳到CFontDialog中.
方法二:還有一段代碼可參考:
LOGFONT LocalLogFont;
strcpy(LocalLogFont.lfFaceName, TypeFace);
LocalLogFont.lfWeight = fWeight;
LocalLogFont.lfEscapement = Orient;
LocalLogFont.lfOrientation = Orient;
if (MyFont.CreateFontIndirect(&LocalLogFont))
  {
  cMyOldFont = cdc->SelectObject(&MyFont);
  }

81. 如何用鍵盤滾動(dòng)分割的視口?

我的問題是當(dāng)我用鼠標(biāo)滾動(dòng)分割窗口時(shí),視口滾動(dòng)都很正常,但用鍵盤時(shí),卻什么也沒有發(fā)生.
在你的視圖繼承類中加入如下兩個(gè)函數(shù),假定該類為CScrollerView:
void CScrollerView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
    BOOL processed;
    for (unsigned int i=0;i< nRepCnt&&processed;i++)
        processed=KeyScroll(nChar);
    if (!processed)
      CScrollView::OnKeyDown(nChar, nRepCnt, nFlags);
}
BOOL CScrollerView::KeyScroll(UINT nChar)
{
    switch (nChar)
        {
        case VK_UP:
            OnVScroll(SB_LINEUP,0,NULL);
            break;
        case VK_DOWN:
            OnVScroll(SB_LINEDOWN,0,NULL);
            break;
        case VK_LEFT:
            OnHScroll(SB_LINELEFT,0,NULL);
            break;
        case VK_RIGHT:
            OnHScroll(SB_LINERIGHT,0,NULL);
            break;
        case VK_HOME:
            OnHScroll(SB_LEFT,0,NULL);
            break;
        case VK_END:
            OnHScroll(SB_RIGHT,0,NULL);
            break;
        case VK_PRIOR:
            OnVScroll(SB_PAGEUP,0,NULL);
            break;
        case VK_NEXT:
            OnVScroll(SB_PAGEDOWN,0,NULL);
            break;
        default:
            return FALSE; // not for us
               // and let the default class
               // process it.
        }
  return TRUE;
}

82. 如何改變默認(rèn)的光標(biāo)形狀?

我試著將光標(biāo)改變?yōu)槠渌男螤詈皖伾?但卻沒有變化.
在對(duì)話框/窗口/你需要的地方加上對(duì)WM_SETCURSOR消息的處理.
BOOL MyDialog::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
  // TOD Add your message handler code here and/or call default
  ::SetCursor(AfxGetApp()->LoadCursor(IDC_MYCURSOR));
  return TRUE;
  //return CDialog::OnSetCursor(pWnd, nHitTest, message);
}
你沒有成功的原因是因?yàn)榇翱陬惞鈽?biāo)風(fēng)格不能為NULL.

83. 如何選擇CTreeCtrl中的節(jié)點(diǎn)文本進(jìn)行編輯?

在向CTreeCtrl中加入一項(xiàng)后,有什么方法可以編輯該節(jié)點(diǎn)的文本呢?
首先設(shè)置你的CcompTreeCtrl具有TVS_EDITLABELS屬性.在設(shè)計(jì)時(shí)用控件屬性來設(shè)置在運(yùn)行時(shí)用GetStyle()/SetStyle()成員函數(shù)來設(shè)置.然后請(qǐng)看下述代碼:
HTREEITEM CCompTreeCtrl::AddSet()
{
static int setCnt =3D 1;
HTREEITEM hItem;
CString csSet;
//create text for new note: New Set 1, New Set 2 ...
csSet.Format( _T( "New Set %d" ), setCnt++ );
hItem =3D InsertItem( csSet, IMG_CLOSEDFOLDER, IMG_CLOSEDFOLDER );
if( hItem !=3D NULL )
      EditLabel( hItem );
return hItem;
}

84. CListCtrl中選擇變化時(shí)如何獲得通知?

我在Report View中使用了一個(gè)CListCtrl(自繪制類型),我想知道什么時(shí)候選擇項(xiàng)發(fā)生了改變.
在選擇項(xiàng)變化時(shí),可以使用按鈕有效或失效,按如下操作:
 加入LVN_ITEMCHANGED消息處理.
void CYourClassNameHere::OnItemchangedEventList(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
*pResult = 0;
if (pNMListView->uChanged == LVIF_STATE)
{
 if (pNMListView->uNewState)
  GetDlgItem(IDC_DELETE)->EnableWindow(TRUE);
 else
  GetDlgItem(IDC_DELETE)->EnableWindow(FALSE);
}
}

85. List控件中整欄選擇?

我在處理List控件時(shí)碰到了麻煩,我想創(chuàng)建一個(gè)ListView,來依據(jù)Tree控件的選擇同時(shí)在ListView和ReportView中顯示列表的信息.以下是相關(guān)的代碼:
// Set full line select
ListView_SetExtendedListViewStyle(m_plstCustomers->GetSafeHwnd(),
LVS_EX_FULLROWSELECT);
按如下方法處理:
// -------------------- begin of snippet --------------------------------
bool CCommCtrlUtil32::ListCtrl_ModifyExtendedStyle(CListCtrl& p_rListCtrl,
                  const DWORD p_dwStyleEx,
                  const bool p_bAdd)
{
  HWND t_hWnd = p_rListCtrl.GetSafeHwnd();
  DWORD t_dwStyleEx = ListView_GetExtendedListViewStyle(t_hWnd);
  if(p_bAdd)
  {
    if(0 == (p_dwStyleEx & t_dwStyleEx))
    {
      // add style
      t_dwStyleEx |= p_dwStyleEx;
    }
  }
  else
  {
    if(0 != (p_dwStyleEx & t_dwStyleEx))
    {
      // remove style
      t_dwStyleEx &= ~p_dwStyleEx;
    }
  }
  ListView_SetExtendedListViewStyle(t_hWnd, t_dwStyleEx);
  return true;
}

86. 如何限制mdi子框架最大化時(shí)的大小?

用ptMaxTrackSize代替prMaxSize,如下所示:
void CChildFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{
  // TOD Add your message handler code here and/or call default
  CChildFrame::OnGetMinMaxInfo(lpMMI);
  lpMMI->ptMaxTrackSize.x = 300;
  lpMMI->ptMaxTrackSize.y = 400;
}

87. 怎樣實(shí)現(xiàn)3D效果?

在對(duì)話框中怎樣實(shí)現(xiàn)Edit和Listboxes控件的3D效果?(環(huán)境95/NT VC5.0)
1). 使用帶WS_EX_CLIENTEDGE標(biāo)志的::CreateWindowEx來替換::CreateWindow 或者用CWnd::CreateEx替換CWnd::Create.
2).在建立控件之后,調(diào)用ModifyStyleEx(0, WS_EX_CLIENTEDGE).

88. How do I update the text of a pane in a status bar?

By default, a CStatusBar pane is not enabled when the pane is created. To activate a pane, you must call the ON_UPDATE_COMMAND_UI() macro for each pane on the status bar and update the panes. Because panes do not send WM_COMMAND messages, you cannot use ClassWizard to activate panes; you must type the code manually. For example, suppose one pane has ID_INDICATOR_PAGE as its identifier and that it contains the current page number in a document. To make the ID_INDICATOR_PAGE pane display text, add the following to a header file (probably the MAINFRM.H file):

afx_msg void OnUpdatePage(CCmdUI *pCmdUI);

Add the following to the application message map:

ON_UPDATE_COMMAND_UI(ID_INDICATOR_PAGE, OnUpdatePage)

Add the following to a source code file (probably MAINFRM.CPP):

void CMainFrame::OnUpdatePage(CCmdUI *pCmdUI)
{
  pCmdUI->Enable();
}

To display text in the panes, either call SetPaneText() or call CCmdUI::SetText() in the OnUpdate() function. For example, you might want to set up an integer variable m_nPage that contains the current page number. Then, the OnUpdatePage() function might read as follows:

void CMainFrame::OnUpdatePage(CCmdUI *pCmdUI)
{
  pCmdUI->Enable();
  char szPage[16];
  wsprintf((LPSTR)szPage, "Page %d", m_nPage);
  pCmdUI->SetText((LPSTR)szPage);
}

This technique causes the page number to appear in the pane during idle processing in the same manner that the application updates other indicators.

89. 動(dòng)態(tài)修改對(duì)話框的大小

 [問題提出]
  關(guān)于如何動(dòng)態(tài)改變對(duì)話框的大小,我做了個(gè)Demo,大家看看.

 [程序?qū)崿F(xiàn)]
   //本函數(shù)使用方法:
   //第一個(gè)參數(shù):如果是TRUE表示顯示擴(kuò)展的對(duì)話框,如果是FALSE,表示縮小對(duì)話框。
   //第二個(gè)參數(shù):表示本對(duì)話框的HWND,
   //第三個(gè)參數(shù):表示縮小后大小的控件的ID
  void COptionDlg::ExpandBox(BOOL fExpand, HWND hwnd, int nIDDefaultBox)
  {
     CWnd *pWndBox=GetDlgItem(nIDDefaultBox);
     RECT rcDefaultBox,rcChild,rcIntersection,rcWnd;
     pWndBox->GetWindowRect(&rcDefaultBox);
     HWND hwndChild = ::GetTopWindow(hwnd);
     for (; hwndChild != NULL; hwndChild = ::GetNextWindow(hwndChild,GW_HWNDNEXT))
     {
         ::GetWindowRect(hwndChild, &rcChild);
         if (!IntersectRect(&rcIntersection, &rcChild, &rcDefaultBox))
              ::EnableWindow(hwndChild, fExpand);
     }
     ::GetWindowRect(hwnd, &rcWnd);
     if (GetWindowLong(hwnd, GWL_USERDATA) == 0)
     {
         SetWindowLong(hwnd, GWL_USERDATA,
              MAKELONG(rcWnd.right - rcWnd.left,
              rcWnd.bottom - rcWnd.top));
         ::ShowWindow(pWndBox->m_hWnd, SW_HIDE);
     }
     ::SetWindowPos(hwnd, NULL, 0, 0,
         rcDefaultBox.right - rcWnd.left,
         rcDefaultBox.bottom - rcWnd.top,
         SWP_NOZORDER | SWP_NOMOVE);
     if(fExpand)
     {
         DWORD dwDims = GetWindowLong(hwnd, GWL_USERDATA);
         ::SetWindowPos(hwnd, NULL, 0, 0,
              LOWORD(dwDims), HIWORD(dwDims), SWP_NOZORDER | SWP_NOMOVE);
         ::SendMessage(hwnd, DM_REPOSITION, 0, 0);
     }
  }

90. 用DoModal()調(diào)用模態(tài)對(duì)話框,總是顯示在正中,我重載了它,并添加了MoveWindow(),可是其m_hWnd是一串零,調(diào)用失敗。請(qǐng)問有何方法可使調(diào)用的模態(tài)對(duì)話框顯示于自定義位置?多謝
  我不清楚你把MoveWindow()加在什么地方了,正確的方法是在OnInitDialog中添加MoveWindow,如:
   MoveWindow(0, 1, 300, 200);
  需要注意的是前兩個(gè)參數(shù)不能都為0。如果你確實(shí)希望把窗口放在(0, 0)處,可以在對(duì)話框設(shè)計(jì)窗口的屬性中選中Absolute Align,然后再加入
   MoveWindow(0, 0, 300, 200);
  為什么會(huì)是這樣?你看了MFC的源程序就會(huì)明白。原來MFC在調(diào)用你的OnInitDialog之后,會(huì)調(diào)用CDialog::CheckAutoCenter()(在dlgcore.cpp中)檢查是否需要將窗口居中,你看了這個(gè)函數(shù)后就明白為什么需要上面那么做了。

轉(zhuǎn)載于:https://www.cnblogs.com/lscheng/archive/2011/10/31/2230704.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的【转】MFC学习总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

精品女同一区二区三区在线观看 | 婷婷国产在线 | 欧美成人日韩 | 国产精品久久久久毛片大屁完整版 | 亚洲不卡123 | 99r在线视频 | 亚洲第一香蕉视频 | 成人综合日日夜夜 | 国产在线91精品 | 伊人视频| 久久一区二区三区超碰国产精品 | 园产精品久久久久久久7电影 | 中文字幕在线观看播放 | 91porny九色91啦中文 | 欧美成年人在线视频 | 精品一二三四视频 | 最新中文字幕在线观看视频 | 免费人成网 | 中文字幕精品三区 | 国产资源在线观看 | 天天天操操操 | 色综合天天狠狠 | 99热这里只有精品1 av中文字幕日韩 | 精品国产一区二区三区在线 | 999视频精品 | 日日弄天天弄美女bbbb | 丁香激情婷婷 | 最近日本mv字幕免费观看 | 四虎8848免费高清在线观看 | 黄色特一级片 | 成人在线视频免费看 | 久久99久久99精品 | 就要干b | 免费日韩一区 | 日韩电影精品 | 国产精品综合久久久久久 | 一区二区三区四区精品视频 | 欧美一区成人 | 久久久久女教师免费一区 | 18国产精品福利片久久婷 | 国产精品人成电影在线观看 | 国产精品一区二区久久精品爱微奶 | 日本久久久影视 | 日韩免费视频播放 | 99久热精品 | 在线观看黄色av | 久久高清毛片 | 亚洲成人中文在线 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 成片免费观看视频大全 | 午夜视频播放 | 99热在线国产 | 天堂网中文在线 | 日韩精品中文字幕在线不卡尤物 | 激情欧美一区二区三区 | 久久综合色婷婷 | 亚洲精品国产拍在线 | 欧美a在线免费观看 | 九草视频在线 | 狠狠狠狠狠色综合 | 亚洲综合在线一区二区三区 | 操操碰 | 天天超碰 | 国产在线观看,日本 | 久久久久久草 | 中文字幕 欧美性 | 精品99在线视频 | 亚洲人成在线观看 | 久久精品8 | 亚洲精品国产第一综合99久久 | 色婷婷视频网 | 99re在线视频观看 | 欧美一级欧美一级 | 黄色av网站在线观看免费 | 亚洲视频在线播放 | 九九热精品在线 | 久久综合九色综合欧美就去吻 | 欧美久久九九 | 91亚洲精品久久久中文字幕 | 天天撸夜夜操 | 日本公妇在线观看 | 成人免费在线观看入口 | 99久久精品久久久久久动态片 | 国产黄色高清 | 日韩欧美一区二区在线播放 | 美女黄视频免费看 | 久久蜜桃av | 久9在线| 在线观看的黄色 | 中文字幕免费在线看 | 人人看人人 | 国产无限资源在线观看 | 夜夜躁日日躁狠狠久久av | 国产一区二区播放 | 综合国产在线观看 | 国产经典av | 国产精品电影在线 | 91亚洲国产成人 | 人人爽人人插 | 亚洲人av免费网站 | 中文字幕人成乱码在线观看 | 在线看毛片网站 | 免费三及片 | 在线看一区 | aaa亚洲精品一二三区 | 日本黄网站 | 色婷婷综合久久久中文字幕 | 91激情视频在线播放 | 天天搞夜夜骑 | 毛片网在线观看 | 国产在线超碰 | 亚州激情视频 | 欧美aa一级 | 青青河边草免费直播 | 五月天视频网 | 国产精品亚洲视频 | 高清av中文在线字幕观看1 | 一区二区三区在线免费 | 在线а√天堂中文官网 | 欧美激情在线看 | 久久久久免费精品 | 国产日韩欧美自拍 | 伊人精品影院 | 亚洲国产精品久久久 | 欧美精选一区二区三区 | 国产色小视频 | 在线免费观看视频a | 日韩欧美在线播放 | 天天射天天干天天 | 欧美中文字幕久久 | 久久综合色婷婷 | 久久视频这里只有精品 | 91亚洲免费| 国产美女主播精品一区二区三区 | 97视频网址| 中文字幕久久精品 | 综合色婷婷 | 狠狠狠操 | 免费国产视频 | 日日躁夜夜躁xxxxaaaa | 97超碰资源 | 亚洲午夜精品久久久 | 久久九九影视网 | 国产精品毛片一区二区在线看 | 美女久久久久久久久久久 | 亚洲午夜av| 91精品资源| 狠狠操操操| 丁香综合激情 | 全久久久久久久久久久电影 | 久久99精品热在线观看 | 99久久99久久精品国产片果冰 | 天天干,天天射,天天操,天天摸 | 在线中文字幕播放 | 国产成人精品一区二区三区在线观看 | 69国产精品视频 | 日韩高清精品免费观看 | www免费在线观看 | 麻豆视频免费在线观看 | 亚洲涩涩涩涩涩涩 | 国产精品美女久久 | 国产精品一级在线 | 久久不卡国产精品一区二区 | 99精品国产免费久久 | 99在线观看精品 | 久久久免费看 | 免费开视频 | 免费99视频 | www.99热精品| 四虎影视成人精品国库在线观看 | 中文字幕免费高清 | 色av婷婷 | 亚洲激情校园春色 | 99久久超碰中文字幕伊人 | 97视频在线观看播放 | 日韩理论影院 | 成人国产网址 | 午夜久久久久久久久久影院 | 国产免码va在线观看免费 | 青青河边草免费直播 | 亚洲天堂网视频在线观看 | 99久久久久久国产精品 | 成人av电影免费在线观看 | 韩日av在线 | 免费看片日韩 | 亚洲爱爱视频 | 手机成人在线电影 | 久久久久久久久久久网 | 国产精品6999成人免费视频 | 久草免费资源 | 精品一区二区日韩 | 色天天综合久久久久综合片 | 啪啪肉肉污av国网站 | 日韩一级成人av | 97精产国品一二三产区在线 | 欧美国产高清 | www国产亚洲| 97色婷婷人人爽人人 | 久久久久久久99 | 国产一区二区在线免费播放 | 久久影院午夜论 | 精品成人免费 | 91精品网站在线观看 | 特及黄色片 | 欧美乱淫视频 | 日韩av一区二区三区四区 | 99久久免费看 | 中文字幕精品一区二区精品 | 午夜精品久久久久久久99无限制 | 国产二区av | 久久久久97国产 | 国产精品一区二区视频 | 97偷拍在线视频 | 国产网红在线 | 九九九九九九精品 | 国产视频一 | 99国产精品视频免费观看一公开 | 91九色九色| 中国精品少妇 | 日韩色中色 | 免费国产一区二区 | av成人资源| 国产精品永久久久久久久久久 | 国产一区二区精品在线 | 国产在线视频在线观看 | 99热这里只有精品1 av中文字幕日韩 | 成人小视频在线观看免费 | 五月天九九 | 亚洲精品动漫在线 | 欧美性极品xxxx做受 | 国产视频资源在线观看 | 黄色免费观看网址 | 欧美做受高潮 | av免费看在线 | 91看片淫黄大片一级在线观看 | 久久精品国产99国产 | 开心激情综合网 | 曰本免费av | 在线观看黄色av | 韩国一区二区在线观看 | 精品国产区 | 日韩有码在线播放 | 日韩系列在线观看 | 91在线超碰 | 日韩乱码在线 | 性色大片在线观看 | 精品国产观看 | 九九视频在线观看视频6 | 亚洲日本va在线观看 | 在线探花| 亚洲精品网址在线观看 | 成人在线观看你懂的 | 欧美国产大片 | 四虎在线观看网址 | 麻豆视传媒官网免费观看 | 中文字幕在线不卡国产视频 | 五月综合婷 | 国产精品久久久久av福利动漫 | 亚洲精品欧洲精品 | 国产精品二区在线观看 | 日日草夜夜操 | 一区精品在线 | av在线电影免费观看 | 五月综合激情婷婷 | 97超碰在 | 精品国产黄色片 | 二区精品视频 | 国产精品视频免费看 | 亚洲欧洲成人精品av97 | 中文字幕乱偷在线 | 欧美色婷婷| 国产小视频91 | 亚洲伊人天堂 | 一级做a视频| 国产经典三级 | 2021av在线| 日日夜夜天天久久 | www.91av在线 | 国产精品永久久久久久久久久 | 四虎影视国产精品免费久久 | 在线看一区 | 久久手机免费观看 | 日韩91av | 成人免费中文字幕 | 亚洲一级黄色大片 | 99高清视频有精品视频 | 少妇bbw搡bbbb搡bbb | 久久黄色美女 | 国产成人久久av免费高清密臂 | 天天操人人干 | 草久电影 | 国内精品久久久久久久久久 | 福利电影一区二区 | 欧美福利视频 | 视频在线91 | 在线看91| 日日干 天天干 | 久久99国产精品二区护士 | 高清av在线免费观看 | 中文字幕成人网 | 在线视频欧美精品 | 人人插人人艹 | а中文在线天堂 | 亚洲干 | 国产精品亚洲a | 日本中文字幕免费观看 | 插久久 | 一区二区欧美日韩 | 天天干天天操天天爱 | 天堂在线成人 | 在线免费观看成人 | 二区在线播放 | 久久久免费观看完整版 | 少妇精品久久久一区二区免费 | 免费在线观看黄网站 | av网址最新 | 伊人婷婷激情 | 亚洲一二三区精品 | 国产精品久久久久久久久久久久午夜片 | av在线一级 | 久久久影院 | 亚洲激情六月 | 草久电影 | 亚洲精品国 | 66av99精品福利视频在线 | 成人免费看黄 | 成人a级网站 | 日韩毛片一区 | 精品中文字幕视频 | 91av美女| 免费看色视频 | 美女国内精品自产拍在线播放 | 麻豆视频免费版 | 九九99视频 | 美女免费黄视频网站 | 992tv在线观看 | 日韩激情免费视频 | 欧美日韩高清不卡 | 99热这里只有精品久久 | 91综合久久一区二区 | 午夜成人免费电影 | 激情五月开心 | 91福利视频网站 | 国产亚洲婷婷 | a天堂一码二码专区 | 久久久九九 | 免费高清在线观看成人 | 五月天亚洲综合 | 香蕉视频最新网址 | av福利在线 | av一级久久 | 久久久久久久久综合 | 婷婷 中文字幕 | 黄色在线视频网址 | 精品女同一区二区三区在线观看 | 免费视频在线观看网站 | 成人小视频在线观看免费 | 久草精品免费 | 日韩av高清在线观看 | 国产成人综合图片 | 黄色三级免费观看 | 久久在线精品视频 | 亚洲天堂免费视频 | 香蕉影视app | 在线观看免费福利 | 高清av不卡 | 久久亚洲精品国产亚洲老地址 | 国产精品一区在线 | 最近中文字幕久久 | 黄色三级免费网址 | 四虎在线观看视频 | a级一a一级在线观看 | 成年人视频在线观看免费 | 日韩免费一级电影 | 日日操天天操狠狠操 | 国产精品久久久久影院 | 亚洲综合最新在线 | 日韩免费一区 | 五月婷婷伊人网 | www.99在线观看 | 久久99国产精品免费 | 人人干人人超 | 首页中文字幕 | 久久久久看片 | 日韩,中文字幕 | 日韩欧美69 | 亚洲国产久 | 国产一区二区电影在线观看 | 东方av在| 色视频国产直接看 | 国产又黄又硬又爽 | 日日摸日日添日日躁av | 亚洲综合在线视频 | 在线天堂中文www视软件 | 欧美少妇的秘密 | 91精品国产欧美一区二区成人 | 国产精品中文在线 | 婷婷草 | 另类五月激情 | 日韩视频免费播放 | 亚洲最新毛片 | 天天综合色天天综合 | 天天综合日 | 精品国产人成亚洲区 | 日韩伦理片一区二区三区 | 日韩欧美精选 | 亚州av成人 | 天天天操操操 | 亚洲首页 | av一区二区三区在线观看 | 免费精品国产va自在自线 | 色a资源在线 | 亚洲午夜av久久乱码 | 久久五月情影视 | 国产精品一区二区av日韩在线 | 在线播放视频一区 | 成人黄色大片在线观看 | 久久男人中文字幕资源站 | 色婷婷狠狠五月综合天色拍 | 免费精品视频 | 国产一级片免费播放 | 99热精品久久 | 三级黄色片在线观看 | 狠狠的干狠狠的操 | 午夜12点 | 麻豆视频www | 日韩免费视频线观看 | 亚洲黄a | 国产一区二区电影在线观看 | 综合久久久 | 免费观看完整版无人区 | 在线国产中文字幕 | 97品白浆高清久久久久久 | 四虎国产精品成人免费4hu | 日韩免费在线观看视频 | 亚洲精品视频免费观看 | 亚洲欧美偷拍另类 | 99精品视频在线播放免费 | 日韩欧美在线观看 | 亚洲综合成人婷婷小说 | 在线观看播放av | 黄色av网站在线观看 | 三上悠亚一区二区在线观看 | 亚洲高清精品在线 | 99久久精品国产一区二区三区 | 97成人超碰 | 久久久久久久久久久久99 | 久草精品网| 成年人在线观看免费视频 | 97在线视频网站 | 午夜美女福利直播 | 久久躁日日躁aaaaxxxx | 99精品免费视频 | 日本中文字幕一二区观 | 欧美福利视频 | 欧美色图东方 | 色婷婷国产精品 | 91九色视频在线 | 免费视频区 | 国产精品99久久久久 | 欧美激情精品一区 | 在线视频观看你懂的 | 国产 成人 久久 | 久久久久久久久久久综合 | 三三级黄色片之日韩 | 天天躁日日躁狠狠 | 精品国产免费观看 | 91视频com | 91大神dom调教在线观看 | 欧美日韩不卡在线观看 | 婷婷久月 | 精品久久久久国产免费第一页 | 国产精久久久 | 国产精品一区二区视频 | 激情影音先锋 | 在线观看免费国产小视频 | 在线中文字幕av观看 | 亚洲国产午夜视频 | 国产一区二区久久精品 | 91精品电影 | 黄p在线播放 | 成年一级片 | 久久精品人 | 日韩在线观看你懂的 | 日本黄色大片儿 | 国产精品 国内视频 | 欧美一级日韩三级 | 国产色婷婷精品综合在线手机播放 | 玖玖在线免费视频 | 成人福利av | 91在线超碰| 国产精品久久视频 | 又黄又爽的免费高潮视频 | 久久老司机精品视频 | 91av99| 一区二区欧美激情 | 精品国产免费一区二区三区五区 | 国内精品视频久久 | av片在线观看免费 | 久久毛片网 | 国产精品美女www爽爽爽视频 | 欧洲性视频 | 午夜12点| 欧美午夜精品久久久久久浪潮 | 日本在线中文在线 | 伊人久久精品久久亚洲一区 | 尤物九九久久国产精品的分类 | 91成版人在线观看入口 | 中文字幕不卡在线88 | 99色在线观看 | 免费a级观看| 色在线中文字幕 | 超碰在线cao| 日韩欧美在线影院 | 国产 视频 久久 | 中文字幕久久精品 | 欧亚日韩精品一区二区在线 | 黄色免费网站 | 日韩免费中文字幕 | 正在播放国产精品 | 色成人亚洲网 | 天天碰天天操视频 | 麻豆一二| 欧美一区二区三区在线视频观看 | 69国产成人综合久久精品欧美 | 免费h精品视频在线播放 | 日本精品视频在线观看 | 国产在线视频一区二区三区 | 久久免费视频播放 | 三级在线视频观看 | 国产亚洲小视频 | 精品国产不卡 | 日本三级久久久 | 久久久久亚洲精品成人网小说 | 九九热精品视频在线观看 | 超碰在线人人爱 | 91免费国产在线观看 | 中文 一区二区 | 国产999精品久久久影片官网 | 在线观看一区二区精品 | 日日日爽爽爽 | 日韩在线视频免费播放 | 国产电影黄色av | 激情综合色播五月 | 亚洲免费在线视频 | 成 人 黄 色 视频免费播放 | 国产手机在线观看视频 | 欧美激情视频一区二区三区 | 欧美成人精品xxx | 91av视频导航 | 免费高清av在线看 | 欧美va天堂va视频va在线 | 一区 二区 精品 | 亚洲成人国产 | 久久婷婷亚洲 | 又黄又爽又刺激 | 四虎影视www | 久久五月精品 | 最新日韩在线观看 | 久久视频国产精品免费视频在线 | 亚洲一区日韩精品 | 成人在线观看免费 | 久久久人 | 91漂亮少妇露脸在线播放 | 国产片免费在线观看视频 | 日韩亚洲在线观看 | 91高清免费观看 | 超碰激情在线 | 精一区二区 | 日日日操操| 精品国产伦一区二区三区观看说明 | 一二三区视频在线 | 99热在线免费观看 | 亚洲日韩精品欧美一区二区 | 欧美精品一区二区三区一线天视频 | 免费看的视频 | 99精品国产福利在线观看免费 | 岛国av在线免费 | 韩国在线一区二区 | 日本少妇高清做爰视频 | 久久久久久国产精品亚洲78 | 狠狠狠色丁香婷婷综合久久88 | 国产精品99精品久久免费 | 久久精品九色 | 亚洲精品视频在线播放 | 久久久久久久久久毛片 | 亚洲激情六月 | 亚洲网久久 | 国产精品ssss在线亚洲 | 欧美日韩在线观看不卡 | 一区av在线播放 | 国产精品一区二区免费视频 | 公与妇乱理三级xxx 在线观看视频在线观看 | 国产精品福利小视频 | 日韩天天操 | 欧美精品久久久久久久免费 | 日韩久久久久久久 | 久久精品理论 | 九月婷婷综合网 | 在线国产精品一区 | 日韩二区在线 | 国产一区免费看 | 在线观av | 午夜影视av | 狠狠色狠狠色合久久伊人 | 久草男人天堂 | 黄色软件大全网站 | 色婷婷 亚洲 | 亚洲国产成人精品电影在线观看 | 激情欧美xxxx | 久热电影 | 亚洲日本va午夜在线影院 | 亚洲精品视频一 | 人人爽人人澡 | 国产精品永久免费观看 | 五月天电影免费在线观看一区 | 欧美日韩一二三四区 | 奇米四色影狠狠爱7777 | 在线天堂视频 | 免费国产在线精品 | 亚洲午夜大片 | ww亚洲ww亚在线观看 | 一级理论片在线观看 | 国产一级视频在线观看 | 中文字幕在线观看日本 | 国产二区av | 久久视频国产精品免费视频在线 | 涩涩在线 | 欧美精品网站 | 私人av | 夜夜骑天天操 | 国产福利资源 | 美女黄频视频大全 | 91精品麻豆 | 久久视频国产精品免费视频在线 | 成人黄色毛片视频 | 伊人天天狠天天添日日拍 | 欧美激情另类 | 黄色小说在线免费观看 | 2020天天干夜夜爽 | 青青看片 | 97超碰国产在线 | 丁香婷婷久久久综合精品国产 | 日韩精品中文字幕有码 | www.狠狠色.com | 久久这里只有精品1 | 亚洲精品动漫久久久久 | 亚洲爱视频| 久久久免费电影 | 久久精品激情 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 天天干夜夜擦 | 日日夜夜天天综合 | 五月天久久婷 | 色婷婷国产精品 | 色婷婷天天干 | 亚洲最大成人免费网站 | 最近日韩中文字幕中文 | 激情欧美一区二区三区免费看 | 久人人| 色婷婷 亚洲 | 久久99免费 | 欧美亚洲一级片 | 国产精品久久久久三级 | 国产免码va在线观看免费 | 国产黄色免费在线观看 | 亚洲在线观看av | 免费看色视频 | 欧美日韩精品电影 | se视频网址| 色婷婷激婷婷情综天天 | 99视频久久 | 超碰国产在线 | 亚洲h在线播放在线观看h | 久草在线观看 | 成人精品视频 | 亚欧日韩成人h片 | 一区二区三区免费在线播放 | 久久精品日产第一区二区三区乱码 | 久久久高清一区二区三区 | 免费视频区| 免费在线观看av网址 | 亚洲第一成网站 | 亚洲精品国偷拍自产在线观看 | 精品国内自产拍在线观看视频 | 亚洲欧美婷婷六月色综合 | 成人免费视频免费观看 | av先锋影音少妇 | 日日日干| 国产精品成人自产拍在线观看 | 五月婷婷六月丁香在线观看 | 在线免费观看av网站 | 亚洲精品视| 精品国自产在线观看 | 中文在线字幕免费观 | 一区二区三区免费网站 | 综合网中文字幕 | 91精品国产乱码久久 | 国产一级免费在线观看 | 一本一道久久a久久综合蜜桃 | 欧美大荫蒂xxx | 激情中文在线 | 中文字幕一区二区三区四区 | 亚洲国产中文字幕在线 | 亚洲激情久久 | 一级免费黄视频 | 日日躁夜夜躁aaaaxxxx | 欧美精品少妇xxxxx喷水 | 少妇av片 | 91九色国产 | 在线播放 日韩专区 | 97综合在线 | 黄色特级片 | 精品国产欧美一区二区三区不卡 | 国产亚洲精品久久久久久网站 | 免费色婷婷| 欧美亚洲成人免费 | 狠狠成人 | 天天综合色天天综合 | www国产一区 | 日日夜夜狠狠干 | 欧美色就是色 | 免费av大片 | av先锋中文字幕 | 国内精品亚洲 | 91丨九色丨丝袜 | 天天夜夜操 | 免费一级片久久 | 成人久久综合 | 亚洲精品一区二区三区四区高清 | 欧美日韩国产网站 | www.五月天 | 午夜在线观看 | 精品国产一区二区三区av性色 | 精品国产一区二区三区噜噜噜 | 日韩视频免费 | 免费影视大全推荐 | 成人在线免费看 | 五月天婷婷狠狠 | 国产日韩欧美视频 | 成人av视屏 | 日韩av在线免费播放 | 久久精品2 | 日韩免费一区二区三区 | 麻豆国产精品永久免费视频 | 国产专区免费 | 麻豆国产电影 | 久久久精品视频网站 | 亚洲五月综合 | 国产精品久久久亚洲 | 91日本在线播放 | 国产xxxxx在线观看 | 日本女人b| 久久www免费人成看片高清 | 高清国产午夜精品久久久久久 | 最近更新中文字幕 | 少妇视频在线播放 | 成人av影视观看 | 日韩三级.com| 高清不卡毛片 | 深夜免费福利 | 99热99热| 黄色的片子 | 国产午夜一级毛片 | 欧美先锋影音 | 久久国产精品免费看 | 成人观看视频 | 欧美精彩视频在线观看 | 97操碰| 国产高清在线a视频大全 | 日韩高清久久 | 国产精品嫩草在线 | 国产免费黄视频在线观看 | 国产精品69久久久久 | 91精品久久久久久 | 国产黄色片在线 | 日本公妇在线观看高清 | 亚洲国产免费看 | 亚州人成在线播放 | 99视频在线免费播放 | 国产视频资源在线观看 | 亚洲专区视频在线观看 | 日本高清dvd | 国产青青青 | 亚洲高清网站 | 久久免费一 | 中文字幕日本在线 | 91成品视频 | 国产91在线免费视频 | 欧美精品一级视频 | 福利视频导航网址 | 中文字幕亚洲综合久久五月天色无吗'' | 一级久久精品 | 99视频99| 日韩免费播放 | 国产精品国产三级国产 | 日韩理论影院 | 91精品在线麻豆 | 人人爽人人澡人人添人人人人 | 成人免费在线播放 | 欧洲精品久久久久毛片完整版 | 天天操比 | 日本黄区免费视频观看 | 中文字幕日韩在线播放 | 久久精品国产亚洲精品2020 | 久草免费资源 | 米奇影视7777 | 免费观看一区二区 | 黄色国产精品 | 又色又爽的网站 | 叶爱av在线 | 久久久噜噜噜久久久 | 少妇bbbb搡bbbb搡bbbb | www.色五月.com| 成人aⅴ视频 | 久久九九久久 | a色视频 | 久草精品视频在线观看 | 黄色aa久久 | 午夜三级毛片 | 国产字幕在线观看 | 在线免费观看视频a | 欧美了一区在线观看 | 亚洲欧美成人综合 | 国内一级片在线观看 | 香蕉久久久久久久 | 久久久久亚洲精品男人的天堂 | 亚洲九九九在线观看 | 成人一区二区在线 | 国产精品视频免费看 | 欧美最新另类人妖 | 国产精品国产三级国产 | 国产日韩欧美在线看 | 色悠悠久久综合 | 日韩欧美国产精品 | 在线性视频日韩欧美 | 国产精品一区二区视频 | 亚洲禁18久人片 | 激情www| 少妇bbb| 日本精品视频在线播放 | 91久久爱热色涩涩 | 欧美激情综合网 | 国产精品av免费观看 | 一区二区三区污 | 免费av片在线 | 国产在线一线 | 97精品一区 | 不卡的av在线播放 | 欧美少妇影院 | 日韩精品一区在线观看 | 色小说av | av电影免费 | 不卡电影一区二区三区 | 国内精品久久久久久久久久久 | 日韩视频中文字幕 | 日韩精品免费在线 | 久草在线看片 | 最新中文在线视频 | www九九热 | 日本精品视频一区二区 | 亚洲视频精品 | 国产黄色一级大片 | 欧美国产日韩在线观看 | 久产久精国产品 | 91亚洲在线 | 99电影456麻豆 | 亚洲一级二级三级 | 国产美女无遮挡永久免费 | 日韩免费小视频 | 国产综合视频在线观看 | 天天插天天狠天天透 | 免费av大片 | 草久视频在线观看 | 国产福利在线 | 久久久www成人免费精品张筱雨 | av色图天堂网 | 超碰个人在线 | 中文字幕在线播出 | 欧洲黄色片 | 国产精品va在线 | 久久久久免费网 | 69精品 | 人人爽人人爽人人片av | 欧美日韩91 | 天天天天天天操 | 久久99精品国产麻豆婷婷 | 国产精品麻 | 三级视频片 | 国产精品永久久久久久久久久 | 免费日韩一区二区 | 中文字幕视频观看 | 97人人网| 人人爽人人爽人人爽人人爽 | 在线免费视频你懂的 | 国产午夜精品一区二区三区 | 一级一片免费观看 | 激情久久久久久久久久久久久久久久 | 久草在线观看 | 欧美日韩国产精品爽爽 | 日韩免费不卡视频 | 国产精品网站一区二区三区 | 成人a视频在线观看 | 亚洲另类视频 | 久色婷婷 | 伊人婷婷在线 | 超碰97公开 | 欧美久久九九 | 国产成人精品亚洲日本在线观看 | 中文字幕乱视频 | 一区二区三区日韩在线观看 | 久久色视频 | 色中色资源站 | 国产一级二级三级视频 | 亚洲国产97在线精品一区 | 国产一区国产二区在线观看 | 久久欧洲视频 | 精品国产乱码久久久久久三级人 | 午夜精品一区二区三区在线播放 | 中文字幕色网站 | 中文字幕123区 | 99久高清在线观看视频99精品热在线观看视频 | 最新日韩电影 | 日产中文字幕 | 日韩色视频在线观看 | 国产色网 | 成人黄色大片网站 | 日韩经典一区二区三区 | www.国产毛片 | 国产资源在线视频 | 日韩精品一区二区三区免费观看视频 | 久久久免费观看完整版 | av电影中文字幕 | 国产精品一区二区免费在线观看 | 天天色综合1 | 成人免费在线电影 | 亚洲综合激情网 | 亚洲国产欧美在线人成大黄瓜 | 精品久久久久久久久久久久 | 夜夜天天干| 中文字幕在线观看免费高清完整版 | 91丨九色丨蝌蚪丰满 | 国产99久久久国产精品免费二区 | 免费亚洲精品 | av中文字幕亚洲 | 欧美在线一级片 | 一区在线观看 | 日韩3区 | 免费观看91视频 | 日韩av不卡播放 | 成av在线| 久久女教师 | 97视频人人澡人人爽 | 在线观看av小说 | 亚洲精品 在线视频 | 久久久久伦理电影 | 日韩精品久久久久久 | 免费成人在线视频网站 | 精品国产一区二区三区男人吃奶 | 国产综合精品久久 | 夜夜夜夜猛噜噜噜噜噜初音未来 | 9992tv成人免费看片 | 91福利区一区二区三区 | 色视频网站在线观看一=区 a视频免费在线观看 | 九热精品 | 99亚洲精品视频 | 欧美动漫一区二区三区 | 这里只有精彩视频 | 久久精国产 | 天天干天天摸 | avav99| 一区二区三区久久精品 | 免费毛片一区二区三区久久久 | 国产剧情一区二区在线观看 | 98涩涩国产露脸精品国产网 | www久久久久| 国产亚洲精品精品精品 | av网站在线观看免费 | 国产91精品久久久久 | 国产精品一区二区在线看 | 天天操天天是 | 成人中心免费视频 | 911免费视频 | 亚洲伊人av| 操操色 | 在线精品观看国产 | 五月婷婷开心中文字幕 | 九九在线视频免费观看 | 国产视频精品在线 | 国产成人久久精品77777综合 | 亚洲 av网站| 亚洲精品一区二区在线观看 | 欧美日韩一级在线 | 99精品网站 | 在线观看视频你懂得 | 69国产盗摄一区二区三区五区 | 日韩激情片在线观看 | 丁香激情综合 |