天天看點

【備忘錄】技術筆記整理。

    【原創性聲明】基本上是我平時編碼時,通過MSDN,網絡搜尋等記錄的一些技術性筆記。這些内容本質上沒有我的原創性和創新性内容,但是因為很雜是以本身并不容易都能一一記住。在這裡列出這些條目,已C++為主,沒有什麼中心思想,僅為備忘和查詢使用。

    (1)檢測合法輸入的标準化寫法(char*):

    char text[]; //待檢測文本

    if( strlen ( text ) != desiredLength || strspn ( text, "1234567890") < desiredLength )

      return FALSE;

    其中,desiredLength 是輸入内容的預期長度,"1234567890” 是合法字元集合。

    (2)strncpy ( char *dest, const char *source, size_t count ) 的特征:

    * 當 count <= strlen ( source ) 時不會在後面自動添加 null-terminator,僅執行拷貝字元動作。

    * 當 count > strlen ( source ) 時,會在後面補 0,直到拷貝到目标緩沖區的字元個數達到 count 為止。

    (3)alloca (size_t size) 用于在棧上配置設定空間(無須對應的釋放函數)。

    (4)把制定進制表示的字元串轉換成整數:strtol。

    (5)AdjustWindowRectEx 函數:根據客戶區矩形測量出視窗矩形。

    提供一個客戶區矩形,根據視窗樣式和擴充樣式,是否有菜單等資訊,傳回能容納該客戶區矩形的視窗矩形,此視窗矩形然後可以傳遞給 CreateWindowEx 函數。

    (6)如果在構造(析構)函數中調用虛函數,則調用的是自身類型定義的函數。(這句話表義不太精确,忘記我當初記的是什麼含義)

    (7)MFC 擷取時間跨度。

    CTime time1 ( 2008, 8, 8, 0, 0, 0 );

    CTime time2 = CTime :: GetCurrentTime ();

    CTimeSpan timespan = time2 - time1;

    CString strText;

    strText.Format ( _T ( " %d days %d hours " ), timespan.GetDays(), timespan.GetHours ( ) );

    (8)在對話框上添加蝕刻線:

    添加 Image 控件,把 Color 屬性改為 Etched。

    調整ComboBox 下拉框高度: 選中 ComboBox, 點選下拉按鈕,向下拉尺寸框。注意,如果是用 CreateWindow 函數建立的下拉框,指定的高度不應該是文本框高度,而是包含了文本框 + 下拉清單框的總高度。

    (9)FlashWindow / FlashWindowEx: 閃爍視窗和工作列按鈕。

    (10)MessageBeep ( MB_ICONEXCLAMATION ) :發出系統定義的警告聲。

    (11)在使用者界面上繪制标準控件(例如按鈕,右下角的拖動三角形圖案):DrawControlFrame。

    繪制三維外觀的矩形邊緣:DrawEdge;

    繪制焦點矩形:DrawFocusRect。

    (12)在 for 循環中如果用 break 結束循環,不會執行第三個分句。例如:

    for ( i = 0; i < 1000 ; i ++ ) break;

    printf ( " i = %d \n" , i ); //輸出 i = 0;

    (13)struct 是一種成員函數預設為 public 的 class。

    (14)HRESULT CoFileTimeNow ( FILETIME * lpft ) : 目前時間作為 FILETIME 結構傳回。

    (15)IActiveDesktop :: SetWallpaper : 設定桌面桌面。

    (16)控制服務狀态:ControlService。

    (17)_beginthread, _endthread 是 C 運作時庫函數;

      CreateThread 是 WIN32 API。預設一個線程的棧為 1 MB。

      ExitThread 可以提供一個線程退出碼,用 GetExitCodeThread 擷取這個碼。

    (18)EnumDesktops:枚舉目前程序所在工作站的桌面。

    (19)SetProcessWindowStation:設定程序的視窗工作站。

    WindowStation 工作站包括以下資源:所有桌面,剪貼闆,原子量(這是什麼?)

    (20)SID:security identifier ,可變長度的一個結構體,用于唯一辨別使用者或組。

    Access Control: 權限控制 (winme,95,98不支援)。

    Securable Object:可以擁有一個安全描述符的對象。

    Security descriptor: 安全描述符,和一個 securable object 關聯。

    Security descriptors:包括

      SIDs (主人,組),

      DACL:針對特定使用者、組的權限(允許/拒絕)

      SACL:(這是什麼?)

      一組控制位:指出其自身或成員含義。

    securable objects:包括所有命名的windows對象。一些未命名對象(例如程序,線程)。對于大多數對象,可以在建立他們的API中指定安全描述符,例如:檔案,目錄,命名/匿名管道,程序,線程,檔案映射,access tokens,系統管理對象(工作站,桌面),系統資料庫鍵,系統服務,網絡共享,程序同步對象(events,mutexes,sepaphors,排程(job objects),目錄服務對象。

    Access Token:包含一個登陸會話的權限資訊。

    

    (21)擷取系統資訊(CPU個數,CPU類型):GetSystemInfo。

    (22)播放wav檔案:PlaySound ( _T("....wav"), NULL, SND_FILETIME | SND_ASYNC );

    (23)建立快捷方式:SHCreateShortcutEx。

      IShellLink 接口:建立,修改,解析快捷方式。

    (24)擷取特定檔案夾路徑:SHGetFolderPathAndSubDir。

    (25)MFC中測量字元串:CDC::GetOutputTextExtent。

    (26)重繪菜單:DrawMenuBar ( HWND )。

    (27)擷取對話框字型大小:GetDialogBaseUnits。

    (28)讓 ComboBox 實作自動完成(類似IE位址欄):SHAutoComplete (注意需要先調用COM初始化函數)

       HWND hComboBox = GetDlgItem(hDlg, IDC_COMBO_TEST);

       HWND hEdit = FindWindowEx(hComboBox, NULL, _T("Edit"), NULL);

       SHAutoComplete(hEdit, SHACF_DEFAULT | SHACF_FILESYSTEM) ;

    (29)關閉視窗時動畫效果(例如漸隐):AnimateWindow。

    (30)比 CreateProcess 更簡便的兩個函數:WinExec, ShellExec。

    (31)添加,修改,删除托盤(Tray)圖示:Shell_NotifyIcon。

    (未完待續)