Time of Update: 2017-02-27
.Net內建的產生縮圖的方法是Bitmap.GetThumbnailImage這個方法產生的縮圖不夠清 晰,一般我們會使用Graphics高品質插值發產生清晰的縮圖,這時候大小會不盡人意,怎 麼辦?我們可以使用jpeg壓縮的方法壓縮一下圖片,這樣圖片的大小會縮小到壓縮前的十分 之一。下面是完成這項工作的代碼:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.
Time of Update: 2017-02-27
要實現一個螢幕小鍵盤,需要監聽所有鍵盤事件,無論表單是否被啟用。因此需要一個全域的鉤子,也就是系統範圍的鉤子。什麼是鉤子(Hook)鉤子(Hook)是windows提供的一種訊息處理機制平台,是指在程式正常運行中接受資訊之前預先啟動的函數,用來檢查和修改傳給該程式的資訊,(鉤子)實際上是一個處理訊息的程式段,通過系統調用,把它掛入系統。每當特定的訊息發出,在沒有到達目的視窗前,鉤子程式就先捕獲該訊息,亦即鉤子函數先得到控制權。這時鉤子函數即可以加工處理(改變)該訊息,也可以不作處理而繼續傳遞該訊
Time of Update: 2017-02-27
首先我們讓數組的元素都是由兩個資料域組成,data和cur。也就是說,數組的每一個下標都對應一個data和一個cur。資料域data用來存放資料元素,也就是通常我們要處理的資料;而遊標cur相當於單鏈表中的next指標,存放該元素的後繼在數組中的下標。我們把這種用數組描述的鏈表叫做靜態鏈表。數組的第一個元素,即下標為0的元素的cur就存放備用鏈表的第一個結點的下標;而數組的最後一個元素的cur則存放第一個有數值的元素的下標,相當於單鏈表的前端節點作用,當整個鏈表為空白時,則為0,表示無指向。如圖
Time of Update: 2017-02-27
前面說過,每個線程都有自己的資源,但是代碼區是共用的,即每個線程都可以執行相同的函數。這可能帶來的問題就是幾個線程同時執行一個函數,導致資料的混亂,產生不可預料的結果,因此我們必須避免這種情況的發生。C#提供了一個關鍵字lock,它可以把一段代碼定義為互斥段(critical section),互斥段在一個時刻內只允許一個線程進入執行,而其他線程必須等待。在C#中,關鍵字lock定義如下:lock(expression)
Time of Update: 2017-02-27
先定義一個ListViewHelper類,代碼如下:using System;using System.Collections;using System.Windows.Forms;namespace Common{ /// <summary> /// 對ListView點擊欄位標題自動排序功能 /// </summary> public class ListViewHelper { /// <summary>
Time of Update: 2017-02-27
上一篇中我介紹了一種通過封閉Critical
Time of Update: 2017-02-27
觸及 multiple inheritance (MI)(多繼承)的時候,C++ 社區就會鮮明地分裂為兩個基本的陣營。一個陣營認為如果 single inheritance (SI)(單繼承)是有好處的,multiple inheritance(多繼承)一定更有好處。另一個陣營認為 single inheritance(單繼承)有好處,但是多繼承引起的麻煩使它得不償失。在本文中,我們的主要目的是理解在 MI 問題上的這兩種看法。首要的事情之一是要承認當將 MI
Time of Update: 2017-02-27
下面我們來看虛繼承。首先看看這C020類,它從C010虛繼承:}struct C010{ C010() : c_(0x01) {} void foo() { c_ = 0x02; } char c_;};struct C020 : public virtual C010{ C020() : c_(0x02) {} char c_;};運行如下代碼,查看對象的記憶體布局:PRINT_SIZE_DETAIL(C020)結果為:The size of C020 is 6The detail of C0
Time of Update: 2017-02-27
前段時間簡單的研究了一下.NET操作Lotus Notes郵件的實現,具體的操作包括郵件的讀取和發送,而且都要包含附件,其間參考了《在 Microsoft .NET 應用程式中使用 IBM Lotus Domino》一文,現在把成果和大家分享一下。本文將分為擷取使用者列表、發送郵件、收取郵件三個部分,並會在文末提供範常式序(Visual Studio 2008)的下載。引用如果想使用.NET操作Lotus,我們可以使用 Lotus Domino Objects 通過 COM 來訪問
Time of Update: 2017-02-27
類繼承的最重要的特性是你可以通過基類指標或引用來操作衍生類別。這樣的指標或引用具有行為的多態性,就好像它們同時具有多種形態。C++允許你通過基類指標和引用來操作衍生類別數組。不過這根本就不是一個特性,因為這樣的代碼根本無法如你所願地那樣運行。假設你有一個類BST(比如是搜尋樹對象)和繼承自BST類的衍生類別BalancedBST:class BST { ... };class BalancedBST: public BST { ...
Time of Update: 2017-02-27
背景C++記憶體配置與釋放均由使用者代碼自行控制,靈活的機制有如潘多拉之盒,即讓程式員有了更廣的發揮空間,也產生了代代相傳的記憶體流失問題。對於新手來說,最常犯的錯誤就是new出一個對象而忘記釋放,對於一般小應用程式來說,一點記憶體空間不算什麼。但是當記憶體流失問題出現在需要24小時啟動並執行平台類程式上的時候,將會使系統可用記憶體飛速減少,最後耗盡系統資源,導致系統崩潰。所以學會如何防止並檢查記憶體流失,是一個合格的c++程式員必須具備的能力。但是由於記憶體流失是程式運行並滿足一定條件時才會發
Time of Update: 2017-02-27
判斷Visio圖紙上是否圖紙有裝置(存在圖元), 有兩種方法,一種是通過Window對象的SelectAll方法,在判斷選擇的集合是否不為空白即可,如下:/**//// <summary> /// 判斷是否有對象選定 /// </summary> /// <param name="window"></param> ///
Time of Update: 2017-02-27
在1994年,我主要關心的是如何使ISO
Time of Update: 2017-02-27
在今天,已有許多的32位應用程式感到,在32位平台上可用的虛擬記憶體受到了一定的限制,對程式開發人員來說,即使是開始關注64位平台時,也不得不維護軟體的32位版本,這就需要一種方法,以使代碼的兩個版本都保持相當的延展性。
Time of Update: 2017-02-27
在空白表單上開啟IME,在C#裡的空白視窗是無論如何也是打不開IME.設 置了this.ImeMode= ImeMode.NoControl也是無法開啟IME的錄字視窗.去 Microsoft 開發論壇上問了一些問題.感謝周雪峰版主與Riquel_Dong 版主給的 指點.用了API函數: ImmAssociateContext(IntPtr hWnd, IntPtr hIMC);終 於把IME給調了出來,它的功能是把輸入與指定的視窗進行關聯.代碼如 下:f (m.Msg ==
Time of Update: 2017-02-27
Borland C++ Builder 對 C++ 進行了擴充,也可以象 Delphi 中一樣自訂類屬性。 對於簡單類型的屬性,可以如下定義:class TSome{protected:int a;int b;int s;int GetSum(void){ return s = a + b ; }void SetSum(int s){ this->s = s ; }public://...其它代碼__property int sum={read=GetSum,write=SetSum};/
Time of Update: 2017-02-27
C#語言有很多值得學習的地方,這裡我們主要介紹C#字元數群組轉換,包括介紹字串類 System.String 提供了一個 void ToCharArray() 方法等方面。C#字元數群組轉換字串類 System.String 提供了一個 void ToCharArray()
Time of Update: 2017-02-27
在Windows資源總管中,可在DVD/CD光碟機表徵圖上單擊滑鼠右鍵,選擇"彈出"來開啟光碟機倉門,你可能也發現了,菜單中並沒有"關閉"命令來關閉光碟機。下面,就讓我們用程式來控制開啟、關閉光碟機。程式的主要工作部分為CD_OpenClose(BOOL bOpen, TCHAR cDrive)函數://cDrive是光碟機盤符,或者0x01為預設磁碟機。//例如://CD_OpenCloseDrive(TRUE, 'G'); //開啟光碟機G://CD_
Time of Update: 2017-02-27
//選擇排序class SelectionSorter{ private int min; public void Sort(int[] arr) { for (int i = 0; i < arr.Length - 1; ++i) { min = i; for (int j = i + 1; j < arr.Length; ++j) { if (arr[j] < arr[min]) min =
Time of Update: 2017-02-27
建立表: create table [表名] ( [自動編號欄位] int IDENTITY (1,1) PRIMARY KEY ,[欄位1] nVarChar(50) default '預設值' null ,[欄位2] ntext null ,[欄位3] datetime,[欄位4] money null ,[欄位5] int default 0,[欄位6] Decimal (12,4) default 0,[欄位7] image null , )刪除表: Drop table