Time of Update: 2018-12-06
UpdateData(true); const TCHAR gcszAutoRunKey[]= _T( "Software\\microsoft\\windows\\currentversion\\run" ); const TCHAR gcszWindowClass[] = _T("我的程式");//設定開機程式自啟動索引值位置和其下建立子索引值(可設為程式名) HKEY hKey; LONG lRet, lRet2; DWORD dwLength, dwDataType; TCHAR
Time of Update: 2018-12-06
我們知道,進程是作業系統用於隔離眾多正在啟動並執行應用程式的機制。在.Net之前,每一個應用程式被載入到單獨的進程中,並為該進程指定私人的虛擬記憶體。進程不能直接存取實體記憶體,作業系統通過其它的處理把這些虛擬記憶體映射到實體記憶體或IO裝置的某個地區,而這些實體記憶體之間不會有重疊,這就決定了一個進程不可能訪問分配給另一個進程的記憶體。相應地,運行在該進程中的應用程式也不可能寫入另一個應用程式的記憶體,這確保了任何執行出錯的代碼不會損害其地址空間以外的應用程式。在這種機制下,進程作為應用程式之
Time of Update: 2018-12-06
很多的程式,發現很大的一部分bug是關於MFC類中的Cstring的錯誤用法的.出現這種錯誤的原因主要是對Cstring的實現機制不是太瞭解。Cstring是對於原來標準c中字串類型的一種的封裝。因為,通過很長時間的編程,我們發現,很多程式的bug多和字串有關,典型的有:緩衝溢出、記憶體流失等。而且這些bug都是致命的,會造成系統的癱瘓。因此c++裡就專門的做了一個類用來維護字串指標。標準c++裡的字串類是string,在microsoft
Time of Update: 2018-12-06
進程通常被定義為一個正在啟動並執行程式的執行個體,它由兩個部分組成: 一個是作業系統用來管理進程的核心對象。核心對象也是系統用來存放關於進程的統計資訊的地方 另一個是地址空間,它包含所有的可執行模組或DLL模組的代碼和資料。它還包含動態分配的空間。如線程堆棧和堆分配空間。每個進程被賦予它自己的虛擬位址空間,當進程中的一個線程正在運行時,該線程可以訪問只屬於它的進程的記憶體。屬於其它進程的記憶體則是隱藏的,並不能被正在啟動並執行線程訪問。 為了能在兩個進程之間進行通訊,由以下幾種方法
Time of Update: 2018-12-06
由於Windows程式一般很長,編程人員在一段時間後自己都有可能忘記所定義的變數的含義。為了協助大家記憶與區分變數,微軟公司建立了Windows的命名規範,稱之為匈牙利標記法(Hungarian notation)。匈牙利標記法提供了一組前置詞字元,如表1.1所示,這些首碼也可以組合起來使用。表1.1 匈牙利標記法前 綴含 義a數組b布爾值(int)by
Time of Update: 2018-12-06
在將各種類型的資料構造成字串時,sprintf 的強大功能很少會讓你失望。由於sprintf 跟printf 在用法上幾乎一樣,只是列印的目的地不同而已,前者列印到字串中,後者則直 接在命令列上輸出。這也導致sprintf 比printf 有用得多。sprintf 是個變參函數,定義如下:int sprintf( char *buffer, const char *format [, argument] ...
Time of Update: 2018-12-06
這個例子中將動態改變的工具列按鈕表徵圖存放在ID為IDR_TOOLBAR_SHELL的工具條資源中,可以被作為位元影像資源使用。CImageList * m_imgList1;m_imgList1=(m_wndToolBar.GetToolBarCtrl()).GetImageList();int a= m_imgList1->GetImageCount();CBitmap cbmp;BITMAP bmp;cbmp.LoadBitmap(IDR_TOOLBAR_SHELL);
Time of Update: 2018-12-06
發生記憶體錯誤是件非常麻煩的事情。編譯器不能自動探索這些錯誤,通常是在程式運行時才能捕捉到。而這些錯誤大多沒有明顯的癥狀,時隱時現,增加了改錯的難度。有時使用者怒氣沖沖地把你找來,程式卻沒有發生任何問題,你一走,錯誤又發作了。常見的記憶體錯誤及其對策如下:u
Time of Update: 2018-12-06
首先看看下面的代碼:char *p; p="abc"; 你認為是對的嗎? 答案:文法上是對的,但不提倡這種寫法。誤區1:沒有給p分配記憶體空間就賦值,怎麼會是對的呢? 正解:不少人第一眼將這裡的p="abc"看成了*p="abc",然後就做出了以上的論斷。這是比較笨笨的錯誤。看清楚就好啦,其實賦給p的是"abc"的地址。再說,*p="abc"也不對呀,字串可不能這麼賦值。誤區2:這"abcd"哪來的地址,怎麼能直接賦給p呢? 正解:先自己試試吧。在2K/XP
Time of Update: 2018-12-06
CFile fileEditText; //Declare and open a file for reading CString strsend; if(fileEditText.Open("c:\\1.txt",CFile::modeRead)) { char cBuf[512]; //Declare a large buffer for reading the text UINT uBytestRead; //Continue reading
Time of Update: 2018-12-06
3.1申請方式 stack: 由系統自動分配。 例如,聲明在函數中一個局部變數 int b; 系統自動在棧中為b開闢空間 heap: 需要程式員自己申請,並指明大小,在c中malloc函數 如p1 = (char *)malloc(10); 在C++中用new運算子 如p2 = (char *)malloc(10); 但是注意p1、p2本身是在棧中的。 3.2 申請後系統的響應 棧:只要棧的剩餘空間大於所申請空間,系統將為程式提供記憶體,否則將報異常提示棧溢出。
Time of Update: 2018-12-06
下面這些是和Win32程式共同使用的資料類型BOOL:布爾值,取值為TRUE or FALSEBSTR:32-bit
Time of Update: 2018-12-06
1.函數功能:實現視窗動畫效果2.函數原型:BOOL AnimateWindow(HWND hwnd,DWORD dwTime,DWORD dwFlags);3. 參數說明:
Time of Update: 2018-12-06
控制代碼是不同於指標的,但是實際上的操作有想通的地方。建立一個表單,或者建立DC、BITMAP……都會有相應的控制代碼產生。那麼這些對象銷毀的時候,他們對應的控制代碼也就失效了。或者說可以通過他們的控制代碼來銷毀這些對象。控制代碼是一種指向指標的指標。我們知道,所謂指標是一種記憶體位址。應用程式啟動後,組成這個程式的各對象是住留在記憶體的。如果簡單地理解,似乎我們只要獲知這個記憶體的首地址,那麼就可以隨時用這個地址
Time of Update: 2018-12-06
VIRIANT是ACTIVEX AUTOMATION需要用到的一種變數類型,可以稱之為通用資料類型,其實它是一個結構。如果僅僅是調用ACTIVEX對象所提供的METHOD不需知道其中的細節。它僅用於通過IDISPATCH介面調用特定的METHOD或屬性時用,VB和VC已經將這一過程透明。換句話說,VC會自動轉換單一資料型別。 關於下面的幾個METHOD,例如OPENURL,在MFC中是: CStdioFile* OpenURL( LPCTSTR pstrURL, DWORD
Time of Update: 2018-12-06
#define與const的差別雖然他們在使用中感覺“差不多”,但是他們在實現上有什麼區別?請看下面的代碼:#define T 13 /*用#define定義的一個常量T*/int main(){ const int t=13;/*用const定義的一個常量*/ int n=t;/*把t賦值給n*/ int
Time of Update: 2018-12-06
TRACE 宏的利用TRACE 宏有點象我們以前在C語言中用的Printf函數,使程式在運行過程中輸出一些調試資訊,使我們能瞭解程式的一些狀態。但有一點不同的是:TRACE 宏只有在調試狀態下才有所輸出,而以前用的Printf 函數在任何情況下都有輸出。和Printf 函數一樣,TRACE函數可以接受多個參數如: int x = 1;int y = 16;float z = 32.0;TRACE( "This is a TRACE statement\n" );TRACE( "The
Time of Update: 2018-12-06
1.函數說明:FindWindow,Win32 API函數。FindWindow函數返回與指定字串相匹配的視窗類別名或視窗名的最頂層視窗的視窗控制代碼。這個函數不會尋找子視窗。2.函數原型:HWND FindWindow( LPCTSTR lpClassName, LPCTSTR lpWindowName
Time of Update: 2018-12-06
Visual C++作為一種程式設計語言,它同時也是一個整合開發工具,提供了軟體代碼自動產生和可視化的資源編輯功能。在使用Visual C++開發應用程式的過程中,系統為我們產生了大量的各種類型的檔案,下面將要詳細介紹Visual C++中這些不同類型的檔案分別起到什麼樣的作用,在此基礎上對Visual
Time of Update: 2018-12-06
此方法適用於MFC衍生類別,在基於對話方塊的類中測試通過。具體步驟如下: 1、選擇“Project”菜單,然後“Set Active Project” 。2、選擇“Project”菜單 -->“Add to Project” -->“Components and Controls” -->“VC++ Components” --> “ToolTip Support” 3、選擇“Insert” 4、在對話方塊資源中加入一個按鈕,ID為IDC_ToolTip5、在