C WinForm 中在視窗標題欄上加按鈕

2021-04-02 23:51:35 字數 1990 閱讀 1988

在視窗標題欄上加按鈕本來不是什麼新鮮事了,我在vc++下早也實現過了(相信很多人也都實現過了)。今天乙個朋友問我c# winform下可否實現,我就順便拿c#寫了乙個。

原理是一樣的,都是重寫視窗過程(wndproc),處理一些非客戶區訊息(wm_nc***x),可以說本來沒有什麼新意,可是從寫這個程式的過程中,我也學到了兩個技巧:

1)、c#中重寫視窗過程不用再呼叫setwindowlong api了,直接overide乙個wndproc就可以了。

2)、windows api中的hdc可以通過graphics.fromhdc()轉換為(建立出)system.drawing.graphics,然後就可以用.net framework (gid+??)提供的繪圖功能方便地進行畫圖了。終於可以拋開討厭的gdi api了(說實在話,在c#中呼叫windows api真的太麻煩了:)).

**如下:

using

system;

using

system.drawing;

using

system.drawing.drawing2d;

using

system.collections;

using

system.componentmodel;

using

system.windows.forms;

using

system.data;

using

system.runtime.interopservices;

using

system.diagnostics;

namespace

//////

清理所有正在使用的資源。

///

protected

override

void dispose( bool disposing )

}

base.dispose( disposing ); }

#region

windows

窗體設計器生成的**

///

/// 設計器支援所需的方法 - 不要使用**編輯器修改

///

此方法的內容。

///

private

void initializecomponent()

#endregion

///

/// 應用程式的主入口點。

///

[stathread]

static

void main()

[dllimport ("user32.dll")]

private

static

extern intptr getwindowdc(intptr hwnd);

[dllimport ("user32.dll")]

private

static

extern

int releasedc(intptr hwnd, intptr hdc);

[dllimport ("kernel32.dll")]

private

static

extern

int getlasterror();

// 標題欄按鈕的矩形區域。

rectangle m_rect = new rectangle(205, 6, 20, 20);

protected

override

void wndproc(ref message m)

case 0xa1://wm_nclbuttondown

break; }

} }

//

在視窗大小改變時及時更新按鈕的區域。

private

void form1_sizechanged(object sender, system.eventargs e)

}

}

C WinForm 中在視窗標題欄上加按鈕

在視窗標題欄上加按鈕本來不是什麼新鮮事了,我在vc 下早也實現過了 相信很多人也都實現過了 今天乙個朋友問我c winform下可否實現,我就順便拿c 寫了乙個。原理是一樣的,都是重寫視窗過程 wndproc 處理一些非客戶區訊息 wm nc x 可以說本來沒有什麼新意,可是從寫這個程式的過程中,我...

C WinForm 中在視窗標題欄上加按鈕 轉

system using system.drawing using system.drawing.drawing2d using system.collections using system.componentmodel using system.windows.forms using syste...

移動無標題欄視窗

一般情況下,移動乙個窗體需要將滑鼠放置在標題欄上才能拖動窗體,為 什麼非要使用標題欄呢?其實我們可以使用乙個巧妙的方法來實現將滑鼠放置 在窗體上按下就可拖動窗體,下面先看實現 在form1的 private 部分宣告過程 在private部分加入下列 procedure wmnchittest va...