欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
VC編程經(jīng)驗匯總

VC編程經(jīng)驗匯總

                                      

1. 窗口最大化、最小化的實(shí)現

當我們不能用標題欄的最大化、最小化及恢復按鈕而又需在其他的地方實(shí)現這些功能,可以在指定的消息處理函數里添加:

WINDOWPLACEMENT wndpl;

WINDOWPLACEMENT *pwndpl;

pwndpl = &wndpl;

GetWindowPlacement(pwndpl);

pwndpl->showCmd = SW_SHOWMINMIZED; //實(shí)現窗口最小化

SetWindowPlacement(pwndpl);

其中GetWindowPlacement()函數獲取當前窗口布局的結構WINDOWPLACEMENT的結構變量指針,結構WINDOWPLACEMENT定義為:

typedef struct tagWINDOWPLACEMENT{

    UINT length;

    UINT flags;

    UINT showCmd;

    POINT ptMinPosition;

    POINT ptMaxPosition;

    RECT rcNormalPosition;

}WINDOWPLACEMENT;

其中的成員變量showCmd確定當前窗口的狀態(tài),取值一般為:

·SW_HIDE:隱藏窗口

·SW_MINIMIZE:最小化指定的窗口

·SW_RESTORE:恢復原來(lái)的大小

·SW_SHOW:以原來(lái)的大小激活并顯示

·SW_SHOWMAXIMIZED:激活并最大化窗口

SetWindowPlacement()函數就是按WINDOWPLACEMENT的設置來(lái)顯示窗口

2. 為什么要使用GetSafeHwnd()函數

當我們想得到一個(gè)窗口對象(CWnd的派生對象)指針的句柄(HWND)時(shí),最安全的方法是使用GetSafeHwnd()函數,通過(guò)下面的例子來(lái)看其理由:

CWnd *pwnd = FindWindow(“ExploreWClass”,NULL); //希望找到資源管理器

HWND hwnd = pwnd->m_hwnd;  //得到它的HWND

這樣的代碼當開(kāi)始得到的pwnd為空的時(shí)候就會(huì )出現一個(gè)“General protection error,并關(guān)閉應用程序,因為一般不能對一個(gè)NULL指針訪(fǎng)問(wèn)其成員,如果用下面的代碼:

CWnd *pwnd = FindWindow(“ExploreWClass”,NULL); //希望找到資源管理器

HWND hwnd = pwnd->GetSafeHwnd();  //得到它的HWND

就不會(huì )出現問(wèn)題,因為盡管當pwndNULL時(shí),GetSafeHwnd仍然可以用,只是返回NULL,通過(guò)GetSafeHwnd()的實(shí)現代碼就更清楚了:

_AFXWIN_INLINE HWND CWnd::GetSafeHwnd() const

{

   return this == NULL?NULL:m_hWnd;

}

3. 如何使程序處于極小狀態(tài)

如果我們不想讓程序的窗口被別人看見(jiàn),就可以讓它保持在極小狀態(tài):在恢復程序窗口的時(shí)候,Window會(huì )發(fā)送WM_QUERYOPEN消息,只要在其消息處理函數里返回false就可以了。

BOOL CmainFrame::OnQueryOpen()

{

  return false;

}

4. 如何禁止和能用關(guān)閉按鈕

  Cmenu *pmenu = AfxGetMainWnd()->GetSystemMenu(FALSE);

  if(pmenu)

  {

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

  }

恢復時(shí)只需將MF_GRAYED改為MF_ENABLED

5. 如何在程序中延時(shí)

方法一:

  使用sleep函數,如延時(shí)2秒,用sleep(2000);

方法二:

  使用sleep函數的不利在于延時(shí)期間不能處理其他的消息,如果時(shí)間太長(cháng),就好象死機一樣,利用ColeDateTime類(lèi)和ColeDateTimeSpan類(lèi)實(shí)現延時(shí)就不會(huì )出現那樣的問(wèn)題:

ColeDateTime start_time = ColeDateTime::GetCurrentTime();

ColeDateTimeSpan end_time = ColeDateTime::GetCurrentTime()-start_time;

While(end_time.GetTotalSeconds() <= 2)

{

  MSG msg;

  GetMessage(&msg,NULL,0,0);

  PreTranslateMessage(&msg);

  End_time = ColeDateTime::GetCurrentTime-start_time;

}

這樣在延時(shí)的時(shí)候我們也能夠處理其他的消息。

 

 

 

看了論壇里的一些總結文章很好,我把里面沒(méi)有怎么看到的也寫(xiě)了一點(diǎn)點(diǎn)出來(lái),不知道有沒(méi)有重復,希望能有些微的作用.



本文引用通告地址: http://blog.csdn.net/laiyiling/services/trackbacks/22293.aspx

6. 如何創(chuàng )建可伸縮的對話(huà)框

在進(jìn)行對話(huà)框的設計時(shí),有時(shí)候我們需要設計可伸縮的對話(huà)框,當用戶(hù)按下某個(gè)按鈕時(shí)彈出或隱藏對話(huà)框的下半部分。

1)、首先在對話(huà)框中建立一個(gè)圖片控件把ID設為IDC_DIVIDER,Type設置為矩形,Color設置為黑色,并將其設定為一線(xiàn)狀,拖放在適當的位置做為伸縮對話(huà)框的分割線(xiàn),屬性設為不可見(jiàn)。

2)、實(shí)現的原理:先獲取對話(huà)框的尺寸大小,然后根據的位置來(lái)確定縮減后的對話(huà)框大小,其實(shí)對話(huà)框伸縮的變化就是的值,在縮減對話(huà)框后,我們要使不可見(jiàn)的部分控件被禁止,以禁止加速鍵和TAB鍵對其的操作,在擴展對話(huà)框后,原來(lái)被禁止的控件又要使能。

先在對話(huà)框上的伸縮按鈕添加單擊消息處理函數:

void C***Dlg::OnButtonExpand()

{

  static int bexpand = FALSE; //設初始時(shí)為已擴展的

  ExpandDialog(IDC_DIVIDER,bexpand);//調用擴展或縮減處理函數

  Bexpand = !bexpand;//狀態(tài)取反,為下次的單擊處理準備

}

//在對話(huà)框中添加一個(gè)成員函數ExpandDialog,用于擴展或縮減

void C***Dlg::ExpandDialog(int nResourceID,BOOL bexpand)

{

//參數nResourceID表示分割線(xiàn)的ID

//參數bexpandTRUE時(shí)表示要擴展對話(huà)框,否則縮減對話(huà)框

static CRect rcLarge;

static CRect rcSmall;

if(rcLarge.IsRectNULL())  //首次使用時(shí)記下對話(huà)框的最大、最小尺寸

{

   CRect rcLandmark;

   CWnd *pwndLand = GetDlgItem(nResourceID);

   ASSERT(pwndLand);

   GetWindowRect(rcLarge);

   pwndLand->GetWindowRect(rcLandmark);

   rcSmall = rcLarge;

   rcSmall.bottom = rcLandmark.bottom;

}

if(bexpand)

{

   SetWindowPos(NULL,0,0,rcLarge.Width(),rcLarge.Height(),

SWP_NOMOVE|SWP_NOZORDER);

EnableVisible();

}

else

{

   SetWindowPos(NULL,0,0,rcSmall.Width(),rcSmall.Height(),

SWP_NOMOVE|SWP_NOZORDER);

EnableVisible();

}

}

 

//在對話(huà)框中添加一個(gè)成員函數EnableVisible,用于能用和禁止部分控件

void C***Dlg:: EnableVisible()

{

  CWnd *pwnd = GetDlgItem(GW_CHILD);

  CRect retest;

  CRect rcControl;

  CRect rcShow;

  GetWindowRect(rcShow);

  While(pwnd != NULL)

  {

pwnd->GetWindowRect(rcControl);

if(rcTest.IntersectRect(rcShow,rcControl))

   pwnd->EnableWindow(TRUE);

else

   pwnd->EnableWindow(FALSE);

pwnd = pwnd->GetWindow(GW_HWNDNEXT);

   }

}

7. 為什么有RichEdit控件的對話(huà)框無(wú)法顯示

如果在對話(huà)框上放一個(gè)RichEdit控件,往往發(fā)現對話(huà)框卻無(wú)法正常顯示,這是因為應用程序還沒(méi)有為RichEdit控件的編輯功能做好準備,解決辦法就是在應用程序的InitInstance()函數調用AfxInitRichEdit()函數初始化RichEdit控件

8. 如何指定對話(huà)框的默認按鈕

當建立一個(gè)對話(huà)框的時(shí)候,在默認條件下,確定按鈕(IDOK)是默認按鈕,如果需要改變默認的按鈕有兩種方法:

其一 直接在確定按鈕(IDOK)的屬性里去掉Default button風(fēng)格的選項

其二 在運行的時(shí)候用代碼實(shí)現,如:

  //去掉確定按鈕(IDOK)的默認按鈕

CButton *pokbutton = (CButton *)GetDlgItem(IDOK);

Pokbutton->ModifyStyle(BS_DEFPUSHBUTTON,0);

  //添加IDCANCEL的默認按鈕風(fēng)格

CButton *pcancelbutton = (CButton *)GetDlgItem(IDCANCEL);

pcancelbutton->SetButtonStyle(BS_DEFPUSHBUTTON);

本文引用通告地址: http://blog.csdn.net/laiyiling/services/trackbacks/22294.aspx

1. 顯示和隱藏標題欄

方法一:使用API實(shí)現

//隱藏TitleBar
LONG lStyle = ::GetWindowLong(this->m_hWnd, GWL_STYLE);
::SetWindowLong(this->m_hWnd, GWL_STYLE, lStyle & ~WS_CAPTION);
::SetWindowPos(this->m_hWnd, NULL, 0, 0, 0, 0,
SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED);

// 顯示TitleBar
::SetWindowLong(this->m_hWnd, GWL_STYLE, lStyle | WS_CAPTION);
::SetWindowPos(this->m_hWnd, NULL, 0, 0, 0, 0,??SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED);
方法二:使用CWnd成員函數ModifyStyle實(shí)現
// 隱藏TitleBar
ModifyStyle(WS_CAPTION, 0, SWP_FRAMECHANGED);
// 顯示TitleBar
ModifyStyle(0, WS_CAPTION, SWP_FRAMECHANGED);

2 . 怎么用SendMessage()來(lái)發(fā)送消息來(lái)清空它的內容??
HWND hEditWnd=GetDlgItem(IDC_EDIT1)->GetSafeHwnd();
::SendMessage(hEditWnd,WM_SETTEXT,(WPARAM)0,(LPARAM)"");

3. 彈出文件的屬性窗口
SHELLEXECUTEINFO ShExecInfo ={0};
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_INVOKEIDLIST ;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = "properties";
ShExecInfo.lpFile = "c:\"; //也可以是文件
ShExecInfo.lpParameters = "";
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_SHOW;
ShExecInfo.hInstApp = NULL;
ShellExecuteEx(&ShExecInfo);

4. 刪除一個(gè)目錄下的所有文件

BOOL DeleteDirectory(LPCTSTR DirName)
{
  CFileFind tempFind; //聲明一個(gè)CFileFind類(lèi)變量,以用來(lái)搜索
  char tempFileFind[200]; //用于定義搜索格式
  sprintf(tempFileFind,"%s\\*.*",DirName);
  //匹配格式為*.*,即該目錄下的所有文件 
 
  BOOL IsFinded=(BOOL)tempFind.FindFile(tempFileFind);
  //查找第一個(gè)文件
   while(IsFinded)
  {
     IsFinded=(BOOL)tempFind.FindNextFile(); //遞歸搜索其他的文件 
    if(!tempFind.IsDots()) //如果不是"."目錄
{
 char foundFileName[200];
 strcpy(foundFileName,tempFind.GetFileName().GetBuffer(200));
if(tempFind.IsDirectory()) //如果是目錄,則遞歸地調用
{ //DeleteDirectory
 char tempDir[200];
sprintf(tempDir,"%s\\%s",DirName,foundFileName);
DeleteDirectory(tempDir);
}
else
 { //如果是文件則直接刪除之
 char tempFileName[200];
sprintf(tempFileName,"%s\\%s",DirName,foundFileName);
DeleteFile(tempFileName);
}
}
}
 tempFind.Close();
if(!RemoveDirectory(DirName)) //刪除目錄
 {
AfxMessageBox("刪除目錄失??!",MB_OK);
 return FALSE;
 }
return TRUE;
}

5.? lib和dll文件的區別和聯(lián)系

.dll是在你的程序運行的時(shí)候才連接的文件,因此它是一種比較小的可執行文件格式,.dll還有其他的文件格式如.ocx等,所有的.dll文件都是可執行。

.lib是在你的程序編譯連接的時(shí)候就連接的文件,因此你必須告知編譯器連接的lib文件在那里。一般來(lái)說(shuō),與動(dòng)態(tài)連接文件相對比,lib文件也被稱(chēng)為是靜態(tài)連接庫。當你把代碼編譯成這幾種格式的文件時(shí),在以后他們就不可能再被更改。如果你想使用lib文件,就必須:
1? 包含一個(gè)對應的頭文件告知編譯器lib文件里面的具體內容
2? 設置lib文件允許編譯器去查找已經(jīng)編譯好的二進(jìn)制代碼

如果你想從你的代碼分離一個(gè)dll文件出來(lái)代替靜態(tài)連接庫,仍然需要一個(gè)lib文件。這個(gè)lib文件將被連接到程序告訴操作系統在運行的時(shí)候你想用到什么dll文件,一般情況下,lib文件里有相應的dll文件的名字和一個(gè)指明dll輸出函數入口的順序表。如果不想用lib文件或者是沒(méi)有lib文件,可以用WIN32 API函數LoadLibrary、GetProcAddress。事實(shí)上,我們可以在Visual C++ IDE中以二進(jìn)制形式打開(kāi)lib文件,大多情況下會(huì )看到ASCII碼格式的C++函數或一些重載操作的函數名字。

一般我們最主要的關(guān)于lib文件的麻煩就是出現unresolved symble 這類(lèi)錯誤,這就是lib文件連接錯誤或者沒(méi)有包含.c、.cpp文件到工程里,關(guān)鍵是如果在C++工程里用了C語(yǔ)言寫(xiě)的lib文件,就必需要這樣包含:
extern "C"
{
#include "myheader.h"
}
這是因為C語(yǔ)言寫(xiě)的lib文件沒(méi)有C++所必須的名字破壞,C函數不能被重載,因此連接器會(huì )出錯。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
VC小技巧收集(轉載自風(fēng)林的家)
SkinMagic使用方法
VC 窗口處理函數
VC編程小技巧之框架窗口及其他
MFC中如何將焦點(diǎn)設置到指定控件上
VC++中有關(guān)句柄和指針及其轉換
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久