VC 輕鬆實現非客戶區按鈕

2021-09-01 07:59:02 字數 2221 閱讀 7896

一、簡介

有時我們需要在非客戶區(例如:標題欄)新增按鈕,並對按鈕作出響應,如下圖所示:

為此我封裝了兩個類cncbutton和cncbuttonmanager,cncbutton主要用於按鈕繪製,cncbuttonmanager用於按鈕的管理並對非客戶區的訊息進行處理。如下是幾個主要的非客戶區訊息:

wm_nchittest

wm_ncactivate

wm_ncpaint

二、使用

2.1 首先我們需要引用兩個類的標頭檔案

#include"ncbuttonmanager.h"

#include "ncbutton.h"

2.2 為按鈕定義id

#define id_button1 100

#define id_button2 101

#define id_button3 102

2.3 新增按鈕和管理類成員變數

// implementation

public:

cncbuttonm_ncbutton1;

cncbuttonm_ncbutton2;

cncbuttonm_ncbutton3;

cncbuttonmanagerm_ncbuttonmanager;

2.4 建立按鈕

// 按鈕的位置和尺寸

point ptbtn1offset = ;

point ptbtn2offset = ;

point ptbtn3offset = ;

size sizebtn1 = ;

size sizebtn2 = ;

size sizebtn3 = ;

// 建立按鈕

m_ncbutton1.create("",this->m_hwnd, ptbtn1offset, sizebtn1, id_button1);

m_ncbutton2.create("", this->m_hwnd,ptbtn2offset, sizebtn2, id_button2);

m_ncbutton3.create("",this->m_hwnd, ptbtn3offset, sizebtn3, id_button3);

// 設定文字、提示、按鈕位圖

m_ncbutton1.settext("vc知識庫", "宋體", 12);

m_ncbutton1.settooltip("vc知識庫歡迎您!");

m_ncbutton2.setbuttonbitmap(idb_pen1,btnbmp_normal); // 正常位圖

m_ncbutton2.setbuttonbitmap(idb_pen2,btnbmp_mouseover); // 滑鼠移到上面時的點陣圖

m_ncbutton2.settooltip("pen");

m_ncbutton3.setbuttonbitmap(idb_pen1,btnbmp_normal);

m_ncbutton3.setbuttonbitmap(idb_pen2,btnbmp_mouseover);

m_ncbutton3.settooltip("pen");

// 新增到管理類

m_ncbuttonmanager.addbutton(&m_ncbutton1);

m_ncbuttonmanager.addbutton(&m_ncbutton2);

m_ncbuttonmanager.addbutton(&m_ncbutton3);

2.5 訊息的處理

2.5.1 將訊息**給管理類

lresultcmainframe::defwindowproc(uint message, wparam wparam, lparam lparam)

2.5.2 新增訊息處理函式

// operations

public:

voidonncbutton1clicked();

voidcmainframe::onncbutton1clicked()

2.5.3 訊息對映

begin_message_map(cmainframe,cframewnd)

//}afx_msg_map

end_message_map()

VC 實現 自繪 窗體 標題欄 非客戶區

vc 實現 自繪 窗體 標題欄 非客戶區 1.準備工作。1 得到資料夾中的點陣圖控制代碼 首先要準備相應。hbitmap bitmap bitmap hbitmap loadimage afxgetinstancehandle skin test.bmp image bitmap,0,0,lr de...

在客戶區 非客戶區和桌面畫線

來自孫鑫 vc 深入詳解 客戶區 即視類視窗 非客戶區 包括標題欄 選單欄 工具欄和狀態列。在畫圖之前,需要獲取線圖的起始點與終點。即滑鼠左鍵按下是起始點,左鍵彈起是終點。以下 中的m ptorigin均記錄在onlbuttondown函式中,m ptorigin point 一 利用platfor...

縮小客戶區 擴大非客戶區 的方法

當windows收到 wm nccalcsize 訊息時會指定客戶區大小,我們可以在這個時候設定客戶區的大小。引數lparam是乙個nccalcsize params結構,儲存包含三個矩形的陣列。第乙個矩形儲存視窗的客戶區。你只要改寫這個矩形的值就可以修改客戶區的大小了。修改了客戶區的大小後,還要響...