日韩欧美国产精品免费一二-日韩欧美国产精品亚洲二区-日韩欧美国产精品专区-日韩欧美国产另-日韩欧美国产免费看-日韩欧美国产免费看清风阁

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C# SendMessage在Winform中的應(yīng)用


2024年10月31日 15:55 本文熱度 1205

1. SendMessage簡(jiǎn)介

SendMessage是Windows API中的一個(gè)重要函數(shù),用于在Windows應(yīng)用程序中發(fā)送消息。在C#的Winform應(yīng)用中,我們可以通過P/Invoke機(jī)制調(diào)用SendMessage函數(shù)來(lái)實(shí)現(xiàn)一些特殊的功能。

SendMessage函數(shù)的原型如下:

[DllImport("user32.dll", CharSet = CharSet.Auto)]public?static?extern?IntPtr?SendMessage(IntPtr?hWnd,?uint?Msg,?IntPtr?wParam,?IntPtr?lParam);

其中:
  • hWnd: 接收消息的窗口句柄

  • Msg: 消息ID

  • wParam: 消息的附加參數(shù)

  • lParam: 消息的附加參數(shù)

2. 常見應(yīng)用場(chǎng)景

2.1 設(shè)置文本框內(nèi)容

[DllImport("user32.dll", EntryPoint = "SendMessage")]private static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, string lParam);
private void SetTextBoxText(){ ? ?const int WM_SETTEXT = 0x000C; ? ?SendMessage(textBox1.Handle, WM_SETTEXT, 0, "Hello, SendMessage!");}

2.2 獲取文本框內(nèi)容

[DllImport("User32.dll", EntryPoint = "SendMessage")]private static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, StringBuilder lParam);
private string GetTextBoxText(){ ? ?const int WM_GETTEXT = 0x000D; ? ?StringBuilder sb = new StringBuilder(100); ? ?SendMessage(textBox1.Handle, WM_GETTEXT, sb.Capacity, sb); ? ?return sb.ToString();}

2.3 禁用/啟用窗口

[DllImport("user32.dll")]static extern bool EnableWindow(IntPtr hWnd, bool bEnable);
private void DisableWindow(){ ? ?EnableWindow(this.Handle, false);}
private void EnableWindow(){ ? ?EnableWindow(this.Handle, true);}

2.4 模擬鼠標(biāo)點(diǎn)擊

[DllImport("user32.dll")]static extern bool SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);
private void SimulateButtonClick(){ ? ?const int WM_LBUTTONDOWN = 0x0201; ? ?const int WM_LBUTTONUP = 0x0202; ? ?SendMessage(button1.Handle, WM_LBUTTONDOWN, 0, 0); ? ?SendMessage(button1.Handle, WM_LBUTTONUP, 0, 0);}

3. 高級(jí)應(yīng)用

3.1 自定義窗口樣式

[DllImport("user32.dll")]static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
private void SetWindowStyle(){ ? ?const int WM_SETREDRAW = 0x000B; ? ?const int WS_BORDER = 0x00800000; ? ?// 暫停窗口重繪 ? ?SendMessage(this.Handle, WM_SETREDRAW, 0, 0); ? ?// 修改窗口樣式 ? ?int style = GetWindowLong(this.Handle, GWL_STYLE); ? ?SetWindowLong(this.Handle, GWL_STYLE, style | WS_BORDER); ? ?// 恢復(fù)窗口重繪 ? ?SendMessage(this.Handle, WM_SETREDRAW, 1, 0); ? ?this.Refresh();}
[DllImport("user32.dll")]static extern int GetWindowLong(IntPtr hWnd, int nIndex);
[DllImport("user32.dll")]static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
const int GWL_STYLE = -16;

3.2 實(shí)現(xiàn)拖拽功能

[DllImport("user32.dll")]public static extern bool ReleaseCapture();
[DllImport("user32.dll")]public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
private void Form1_MouseDown(object sender, MouseEventArgs e){ ? ?if (e.Button == MouseButtons.Left) ? ?{ ? ? ? ?ReleaseCapture(); ? ? ? ?SendMessage(this.Handle, 0xA1, 0x2, 0); ? ?}}

3.3 自定義標(biāo)題欄

protected override void WndProc(ref Message m){ ? ?const int WM_NCHITTEST = 0x84; ? ?const int HTCLIENT = 1; ? ?const int HTCAPTION = 2;
? ?if (m.Msg == WM_NCHITTEST) ? ?{ ? ? ? ?Point pos = new Point(m.LParam.ToInt32()); ? ? ? ?pos = this.PointToClient(pos); ? ? ? ?if (pos.Y < 32) // 假設(shè)標(biāo)題欄高度為32像素 ? ? ? ?{ ? ? ? ? ? ?m.Result = (IntPtr)HTCAPTION; ? ? ? ? ? ?return; ? ? ? ?} ? ?} ? ?base.WndProc(ref m);}

4. 注意事項(xiàng)

  1. 使用SendMessage時(shí)要小心,因?yàn)樗赡軙?huì)影響應(yīng)用程序的性能和穩(wěn)定性。

  2. 某些消息可能需要特定的權(quán)限才能發(fā)送,請(qǐng)確保你的應(yīng)用程序有足夠的權(quán)限。

  3. 在多線程環(huán)境中使用SendMessage時(shí)要格外小心,可能需要使用Invoke或BeginInvoke來(lái)確保線程安全。

  4. 不是所有的Windows消息都適合通過SendMessage發(fā)送,有些可能需要使用其他API函數(shù)。

5.常量

//wMsg參數(shù)常量值:
//創(chuàng)建一個(gè)窗口 ? const int WM_CREATE = 0x01; ? //當(dāng)一個(gè)窗口被破壞時(shí)發(fā)送 ? const int WM_DESTROY = 0x02; ? //移動(dòng)一個(gè)窗口 ? const int WM_MOVE = 0x03; ? //改變一個(gè)窗口的大小 ? const int WM_SIZE = 0x05; ? //一個(gè)窗口被激活或失去激活狀態(tài) ? const int WM_ACTIVATE = 0x06; ? //一個(gè)窗口獲得焦點(diǎn) ? const int WM_SETFOCUS = 0x07; ? //一個(gè)窗口失去焦點(diǎn) ? const int WM_KILLFOCUS = 0x08; ? //一個(gè)窗口改變成Enable狀態(tài) ? const int WM_ENABLE = 0x0A; ? //設(shè)置窗口是否能重畫 ? const int WM_SETREDRAW = 0x0B; ? //應(yīng)用程序發(fā)送此消息來(lái)設(shè)置一個(gè)窗口的文本 ? const int WM_SETTEXT = 0x0C; ? //應(yīng)用程序發(fā)送此消息來(lái)復(fù)制對(duì)應(yīng)窗口的文本到緩沖區(qū) ? const int WM_GETTEXT = 0x0D; ? //得到與一個(gè)窗口有關(guān)的文本的長(zhǎng)度(不包含空字符) ? const int WM_GETTEXTLENGTH = 0x0E; ? //要求一個(gè)窗口重畫自己 ? const int WM_PAINT = 0x0F; ? //當(dāng)一個(gè)窗口或應(yīng)用程序要關(guān)閉時(shí)發(fā)送一個(gè)信號(hào) ? const int WM_CLOSE = 0x10; ? //當(dāng)用戶選擇結(jié)束對(duì)話框或程序自己調(diào)用ExitWindows函數(shù) ? const int WM_QUERYENDSESSION = 0x11; ? //用來(lái)結(jié)束程序運(yùn)行 ? const int WM_QUIT = 0x12; ? //當(dāng)用戶窗口恢復(fù)以前的大小位置時(shí),把此消息發(fā)送給某個(gè)圖標(biāo) ? const int WM_QUERYOPEN = 0x13; ? //當(dāng)窗口背景必須被擦除時(shí)(例在窗口改變大小時(shí)) ? const int WM_ERASEBKGND = 0x14; ? //當(dāng)系統(tǒng)顏色改變時(shí),發(fā)送此消息給所有頂級(jí)窗口 ? const int WM_SYSCOLORCHANGE = 0x15; ? //當(dāng)系統(tǒng)進(jìn)程發(fā)出WM_QUERYENDSESSION消息后,此消息發(fā)送給應(yīng)用程序,通知它對(duì)話是否結(jié)束 ? const int WM_ENDSESSION = 0x16; ? //當(dāng)隱藏或顯示窗口是發(fā)送此消息給這個(gè)窗口 ? const int WM_SHOWWINDOW = 0x18; ? //發(fā)此消息給應(yīng)用程序哪個(gè)窗口是激活的,哪個(gè)是非激活的 ? const int WM_ACTIVATEAPP = 0x1C; ? //當(dāng)系統(tǒng)的字體資源庫(kù)變化時(shí)發(fā)送此消息給所有頂級(jí)窗口 ? const int WM_FONTCHANGE = 0x1D; ? //當(dāng)系統(tǒng)的時(shí)間變化時(shí)發(fā)送此消息給所有頂級(jí)窗口 ? const int WM_TIMECHANGE = 0x1E; ? //發(fā)送此消息來(lái)取消某種正在進(jìn)行的摸態(tài)(操作) ? const int WM_CANCELMODE = 0x1F; ? //如果鼠標(biāo)引起光標(biāo)在某個(gè)窗口中移動(dòng)且鼠標(biāo)輸入沒有被捕獲時(shí),就發(fā)消息給某個(gè)窗口 ? const int WM_SETCURSOR = 0x20; ? //當(dāng)光標(biāo)在某個(gè)非激活的窗口中而用戶正按著鼠標(biāo)的某個(gè)鍵發(fā)送此消息給//當(dāng)前窗口 ? const int WM_MOUSEACTIVATE = 0x21; ? //發(fā)送此消息給MDI子窗口//當(dāng)用戶點(diǎn)擊此窗口的標(biāo)題欄,或//當(dāng)窗口被激活,移動(dòng),改變大小 ? const int WM_CHILDACTIVATE = 0x22; ? //此消息由基于計(jì)算機(jī)的訓(xùn)練程序發(fā)送,通過WH_JOURNALPALYBACK的hook程序分離出用戶輸入消息 ? const int WM_QUEUESYNC = 0x23; ? //此消息發(fā)送給窗口當(dāng)它將要改變大小或位置 ? const int WM_GETMINMAXINFO = 0x24; ? //發(fā)送給最小化窗口當(dāng)它圖標(biāo)將要被重畫 ? const int WM_PAINTICON = 0x26; ? //此消息發(fā)送給某個(gè)最小化窗口,僅//當(dāng)它在畫圖標(biāo)前它的背景必須被重畫 ? const int WM_ICONERASEBKGND = 0x27; ? //發(fā)送此消息給一個(gè)對(duì)話框程序去更改焦點(diǎn)位置 ? const int WM_NEXTDLGCTL = 0x28; ? //每當(dāng)打印管理列隊(duì)增加或減少一條作業(yè)時(shí)發(fā)出此消息 ? ?const int WM_SPOOLERSTATUS = 0x2A; ? //當(dāng)button,combobox,listbox,menu的可視外觀改變時(shí)發(fā)送 ? const int WM_DRAWITEM = 0x2B; ? //當(dāng)button, combo box, list box, list view control, or menu item 被創(chuàng)建時(shí) ? const int WM_MEASUREITEM = 0x2C; ? //此消息有一個(gè)LBS_WANTKEYBOARDINPUT風(fēng)格的發(fā)出給它的所有者來(lái)響應(yīng)WM_KEYDOWN消息 ? ?const int WM_VKEYTOITEM = 0x2E; ? //此消息由一個(gè)LBS_WANTKEYBOARDINPUT風(fēng)格的列表框發(fā)送給他的所有者來(lái)響應(yīng)WM_CHAR消息 ? ?const int WM_CHARTOITEM = 0x2F; ? //當(dāng)繪制文本時(shí)程序發(fā)送此消息得到控件要用的顏色 ? const int WM_SETFONT = 0x30; ? //應(yīng)用程序發(fā)送此消息得到當(dāng)前控件繪制文本的字體 ? const int WM_GETFONT = 0x31; ? //應(yīng)用程序發(fā)送此消息讓一個(gè)窗口與一個(gè)熱鍵相關(guān)連 ? ?const int WM_SETHOTKEY = 0x32; ? //應(yīng)用程序發(fā)送此消息來(lái)判斷熱鍵與某個(gè)窗口是否有關(guān)聯(lián) ? const int WM_GETHOTKEY = 0x33; ? //此消息發(fā)送給最小化窗口,當(dāng)此窗口將要被拖放而它的類中沒有定義圖標(biāo),應(yīng)用程序能返回一個(gè)圖標(biāo)或光標(biāo)的句柄,當(dāng)用戶拖放圖標(biāo)時(shí)系統(tǒng)顯示這個(gè)圖標(biāo)或光標(biāo) ? const int WM_QUERYDRAGICON = 0x37; ? //發(fā)送此消息來(lái)判定combobox或listbox新增加的項(xiàng)的相對(duì)位置 ? const int WM_COMPAREITEM = 0x39; ? //顯示內(nèi)存已經(jīng)很少了 ? const int WM_COMPACTING = 0x41; ? //發(fā)送此消息給那個(gè)窗口的大小和位置將要被改變時(shí),來(lái)調(diào)用setwindowpos函數(shù)或其它窗口管理函數(shù) ? const int WM_WINDOWPOSCHANGING = 0x46; ? //發(fā)送此消息給那個(gè)窗口的大小和位置已經(jīng)被改變時(shí),來(lái)調(diào)用setwindowpos函數(shù)或其它窗口管理函數(shù) ? const int WM_WINDOWPOSCHANGED = 0x47; ? //當(dāng)系統(tǒng)將要進(jìn)入暫停狀態(tài)時(shí)發(fā)送此消息 ? const int WM_POWER = 0x48; ? //當(dāng)一個(gè)應(yīng)用程序傳遞數(shù)據(jù)給另一個(gè)應(yīng)用程序時(shí)發(fā)送此消息 ? const int WM_COPYDATA = 0x4A; ? //當(dāng)某個(gè)用戶取消程序日志激活狀態(tài),提交此消息給程序 ? const int WM_CANCELJOURNA = 0x4B; ? //當(dāng)某個(gè)控件的某個(gè)事件已經(jīng)發(fā)生或這個(gè)控件需要得到一些信息時(shí),發(fā)送此消息給它的父窗口 ? ?const int WM_NOTIFY = 0x4E; ? //當(dāng)用戶選擇某種輸入語(yǔ)言,或輸入語(yǔ)言的熱鍵改變 ? const int WM_INPUTLANGCHANGEREQUEST = 0x50; ? //當(dāng)平臺(tái)現(xiàn)場(chǎng)已經(jīng)被改變后發(fā)送此消息給受影響的最頂級(jí)窗口 ? const int WM_INPUTLANGCHANGE = 0x51; ? //當(dāng)程序已經(jīng)初始化windows幫助例程時(shí)發(fā)送此消息給應(yīng)用程序 ? const int WM_TCARD = 0x52; ? //此消息顯示用戶按下了F1,如果某個(gè)菜單是激活的,就發(fā)送此消息個(gè)此窗口關(guān)聯(lián)的菜單,否則就發(fā)送給有焦點(diǎn)的窗口,如果//當(dāng)前都沒有焦點(diǎn),就把此消息發(fā)送給//當(dāng)前激活的窗口 ? const int WM_HELP = 0x53; ? //當(dāng)用戶已經(jīng)登入或退出后發(fā)送此消息給所有的窗口,//當(dāng)用戶登入或退出時(shí)系統(tǒng)更新用戶的具體設(shè)置信息,在用戶更新設(shè)置時(shí)系統(tǒng)馬上發(fā)送此消息 ? const int WM_USERCHANGED = 0x54; ? //公用控件,自定義控件和他們的父窗口通過此消息來(lái)判斷控件是使用ANSI還是UNICODE結(jié)構(gòu) ? const int WM_NOTIFYFORMAT = 0x55; ? //當(dāng)用戶某個(gè)窗口中點(diǎn)擊了一下右鍵就發(fā)送此消息給這個(gè)窗口 ? //const int WM_CONTEXTMENU = ??; ? //當(dāng)調(diào)用SETWINDOWLONG函數(shù)將要改變一個(gè)或多個(gè) 窗口的風(fēng)格時(shí)發(fā)送此消息給那個(gè)窗口 ? const int WM_STYLECHANGING = 0x7C; ? //當(dāng)調(diào)用SETWINDOWLONG函數(shù)一個(gè)或多個(gè) 窗口的風(fēng)格后發(fā)送此消息給那個(gè)窗口 ? const int WM_STYLECHANGED = 0x7D; ? //當(dāng)顯示器的分辨率改變后發(fā)送此消息給所有的窗口 ? const int WM_DISPLAYCHANGE = 0x7E; ? //此消息發(fā)送給某個(gè)窗口來(lái)返回與某個(gè)窗口有關(guān)連的大圖標(biāo)或小圖標(biāo)的句柄 ? const int WM_GETICON = 0x7F; ? //程序發(fā)送此消息讓一個(gè)新的大圖標(biāo)或小圖標(biāo)與某個(gè)窗口關(guān)聯(lián) ? const int WM_SETICON = 0x80; ? //當(dāng)某個(gè)窗口第一次被創(chuàng)建時(shí),此消息在WM_CREATE消息發(fā)送前發(fā)送 ? const int WM_NCCREATE = 0x81; ? //此消息通知某個(gè)窗口,非客戶區(qū)正在銷毀 ? ?const int WM_NCDESTROY = 0x82; ? //當(dāng)某個(gè)窗口的客戶區(qū)域必須被核算時(shí)發(fā)送此消息 ? const int WM_NCCALCSIZE = 0x83; ? //移動(dòng)鼠標(biāo),按住或釋放鼠標(biāo)時(shí)發(fā)生 ? const int WM_NCHITTEST = 0x84; ? //程序發(fā)送此消息給某個(gè)窗口當(dāng)它(窗口)的框架必須被繪制時(shí) ? const int WM_NCPAINT = 0x85; ? //此消息發(fā)送給某個(gè)窗口僅當(dāng)它的非客戶區(qū)需要被改變來(lái)顯示是激活還是非激活狀態(tài) ? const int WM_NCACTIVATE = 0x86; ? //發(fā)送此消息給某個(gè)與對(duì)話框程序關(guān)聯(lián)的控件,widdows控制方位鍵和TAB鍵使輸入進(jìn)入此控件通過應(yīng) ? const int WM_GETDLGCODE = 0x87; ? //當(dāng)光標(biāo)在一個(gè)窗口的非客戶區(qū)內(nèi)移動(dòng)時(shí)發(fā)送此消息給這個(gè)窗口 非客戶區(qū)為:窗體的標(biāo)題欄及窗 的邊框體 ? const int WM_NCMOUSEMOVE = 0xA0; ? //當(dāng)光標(biāo)在一個(gè)窗口的非客戶區(qū)同時(shí)按下鼠標(biāo)左鍵時(shí)提交此消息 ? const int WM_NCLBUTTONDOWN = 0xA1; ? //當(dāng)用戶釋放鼠標(biāo)左鍵同時(shí)光標(biāo)某個(gè)窗口在非客戶區(qū)十發(fā)送此消息 ? ?const int WM_NCLBUTTONUP = 0xA2; ? //當(dāng)用戶雙擊鼠標(biāo)左鍵同時(shí)光標(biāo)某個(gè)窗口在非客戶區(qū)十發(fā)送此消息 ? const int WM_NCLBUTTONDBLCLK = 0xA3; ? //當(dāng)用戶按下鼠標(biāo)右鍵同時(shí)光標(biāo)又在窗口的非客戶區(qū)時(shí)發(fā)送此消息 ? const int WM_NCRBUTTONDOWN = 0xA4; ? //當(dāng)用戶釋放鼠標(biāo)右鍵同時(shí)光標(biāo)又在窗口的非客戶區(qū)時(shí)發(fā)送此消息 ? const int WM_NCRBUTTONUP = 0xA5; ? //當(dāng)用戶雙擊鼠標(biāo)右鍵同時(shí)光標(biāo)某個(gè)窗口在非客戶區(qū)十發(fā)送此消息 ? const int WM_NCRBUTTONDBLCLK = 0xA6; ? //當(dāng)用戶按下鼠標(biāo)中鍵同時(shí)光標(biāo)又在窗口的非客戶區(qū)時(shí)發(fā)送此消息 ? const int WM_NCMBUTTONDOWN = 0xA7; ? //當(dāng)用戶釋放鼠標(biāo)中鍵同時(shí)光標(biāo)又在窗口的非客戶區(qū)時(shí)發(fā)送此消息 ? const int WM_NCMBUTTONUP = 0xA8; ? //當(dāng)用戶雙擊鼠標(biāo)中鍵同時(shí)光標(biāo)又在窗口的非客戶區(qū)時(shí)發(fā)送此消息 ? const int WM_NCMBUTTONDBLCLK = 0xA9; ? //WM_KEYDOWN 按下一個(gè)鍵 ? const int WM_KEYDOWN = 0x0100; ? //釋放一個(gè)鍵 ? const int WM_KEYUP = 0x0101; ? //按下某鍵,并已發(fā)出WM_KEYDOWN, WM_KEYUP消息 ? const int WM_CHAR = 0x102; ? //當(dāng)用translatemessage函數(shù)翻譯WM_KEYUP消息時(shí)發(fā)送此消息給擁有焦點(diǎn)的窗口 ? const int WM_DEADCHAR = 0x103; ? //當(dāng)用戶按住ALT鍵同時(shí)按下其它鍵時(shí)提交此消息給擁有焦點(diǎn)的窗口 ? const int WM_SYSKEYDOWN = 0x104; ? //當(dāng)用戶釋放一個(gè)鍵同時(shí)ALT 鍵還按著時(shí)提交此消息給擁有焦點(diǎn)的窗口 ? const int WM_SYSKEYUP = 0x105; ? //當(dāng)WM_SYSKEYDOWN消息被TRANSLATEMESSAGE函數(shù)翻譯后提交此消息給擁有焦點(diǎn)的窗口 ? const int WM_SYSCHAR = 0x106; ? //當(dāng)WM_SYSKEYDOWN消息被TRANSLATEMESSAGE函數(shù)翻譯后發(fā)送此消息給擁有焦點(diǎn)的窗口 ? const int WM_SYSDEADCHAR = 0x107; ? //在一個(gè)對(duì)話框程序被顯示前發(fā)送此消息給它,通常用此消息初始化控件和執(zhí)行其它任務(wù) ? const int WM_INITDIALOG = 0x110; ? //當(dāng)用戶選擇一條菜單命令項(xiàng)或當(dāng)某個(gè)控件發(fā)送一條消息給它的父窗口,一個(gè)快捷鍵被翻譯 ? const int WM_COMMAND = 0x111; ? //當(dāng)用戶選擇窗口菜單的一條命令或//當(dāng)用戶選擇最大化或最小化時(shí)那個(gè)窗口會(huì)收到此消息 ? const int WM_SYSCOMMAND = 0x112; ? //發(fā)生了定時(shí)器事件 ? const int WM_TIMER = 0x113; ? //當(dāng)一個(gè)窗口標(biāo)準(zhǔn)水平滾動(dòng)條產(chǎn)生一個(gè)滾動(dòng)事件時(shí)發(fā)送此消息給那個(gè)窗口,也發(fā)送給擁有它的控件 ? const int WM_HSCROLL = 0x114; ? //當(dāng)一個(gè)窗口標(biāo)準(zhǔn)垂直滾動(dòng)條產(chǎn)生一個(gè)滾動(dòng)事件時(shí)發(fā)送此消息給那個(gè)窗口也,發(fā)送給擁有它的控件 ? const int WM_VSCROLL = 0x115; ? //當(dāng)一個(gè)菜單將要被激活時(shí)發(fā)送此消息,它發(fā)生在用戶菜單條中的某項(xiàng)或按下某個(gè)菜單鍵,它允許程序在顯示前更改菜單 ? const int WM_INITMENU = 0x116; ? //當(dāng)一個(gè)下拉菜單或子菜單將要被激活時(shí)發(fā)送此消息,它允許程序在它顯示前更改菜單,而不要改變?nèi)?? const int WM_INITMENUPOPUP = 0x117; ? //當(dāng)用戶選擇一條菜單項(xiàng)時(shí)發(fā)送此消息給菜單的所有者(一般是窗口) ? const int WM_MENUSELECT = 0x11F; ? //當(dāng)菜單已被激活用戶按下了某個(gè)鍵(不同于加速鍵),發(fā)送此消息給菜單的所有者 ? const int WM_MENUCHAR = 0x120; ? //當(dāng)一個(gè)模態(tài)對(duì)話框或菜單進(jìn)入空載狀態(tài)時(shí)發(fā)送此消息給它的所有者,一個(gè)模態(tài)對(duì)話框或菜單進(jìn)入空載狀態(tài)就是在處理完一條或幾條先前的消息后沒有消息它的列隊(duì)中等待 ? const int WM_ENTERIDLE = 0x121; ? //在windows繪制消息框前發(fā)送此消息給消息框的所有者窗口,通過響應(yīng)這條消息,所有者窗口可以通過使用給定的相關(guān)顯示設(shè)備的句柄來(lái)設(shè)置消息框的文本和背景顏色 ? const int WM_CTLCOLORMSGBOX = 0x132; ? //當(dāng)一個(gè)編輯型控件將要被繪制時(shí)發(fā)送此消息給它的父窗口通過響應(yīng)這條消息,所有者窗口可以通過使用給定的相關(guān)顯示設(shè)備的句柄來(lái)設(shè)置編輯框的文本和背景顏色 ? const int WM_CTLCOLOREDIT = 0x133; ? //當(dāng)一個(gè)列表框控件將要被繪制前發(fā)送此消息給它的父窗口通過響應(yīng)這條消息,所有者窗口可以通過使用給定的相關(guān)顯示設(shè)備的句柄來(lái)設(shè)置列表框的文本和背景顏色 ? const int WM_CTLCOLORLISTBOX = 0x134; ? //當(dāng)一個(gè)按鈕控件將要被繪制時(shí)發(fā)送此消息給它的父窗口通過響應(yīng)這條消息,所有者窗口可以通過使用給定的相關(guān)顯示設(shè)備的句柄來(lái)設(shè)置按紐的文本和背景顏色 ? const int WM_CTLCOLORBTN = 0x135; ? //當(dāng)一個(gè)對(duì)話框控件將要被繪制前發(fā)送此消息給它的父窗口通過響應(yīng)這條消息,所有者窗口可以通過使用給定的相關(guān)顯示設(shè)備的句柄來(lái)設(shè)置對(duì)話框的文本背景顏色 ? const int WM_CTLCOLORDLG = 0x136; ? //當(dāng)一個(gè)滾動(dòng)條控件將要被繪制時(shí)發(fā)送此消息給它的父窗口通過響應(yīng)這條消息,所有者窗口可以通過使用給定的相關(guān)顯示設(shè)備的句柄來(lái)設(shè)置滾動(dòng)條的背景顏色 ? const int WM_CTLCOLORSCROLLBAR = 0x137; ? //當(dāng)一個(gè)靜態(tài)控件將要被繪制時(shí)發(fā)送此消息給它的父窗口通過響應(yīng)這條消息,所有者窗口可以 通過使用給定的相關(guān)顯示設(shè)備的句柄來(lái)設(shè)置靜態(tài)控件的文本和背景顏色 ? const int WM_CTLCOLORSTATIC = 0x138; ? //當(dāng)鼠標(biāo)輪子轉(zhuǎn)動(dòng)時(shí)發(fā)送此消息個(gè)當(dāng)前有焦點(diǎn)的控件 ? const int WM_MOUSEWHEEL = 0x20A; ? //雙擊鼠標(biāo)中鍵 ? const int WM_MBUTTONDBLCLK = 0x209; ? //釋放鼠標(biāo)中鍵 ? const int WM_MBUTTONUP = 0x208; ? //移動(dòng)鼠標(biāo)時(shí)發(fā)生,同WM_MOUSEFIRST ? const int WM_MOUSEMOVE = 0x200; ? //按下鼠標(biāo)左鍵 ? const int WM_LBUTTONDOWN = 0x201; ? //釋放鼠標(biāo)左鍵 ? const int WM_LBUTTONUP = 0x202; ? //雙擊鼠標(biāo)左鍵 ? const int WM_LBUTTONDBLCLK = 0x203; ? //按下鼠標(biāo)右鍵 ? const int WM_RBUTTONDOWN = 0x204; ? //釋放鼠標(biāo)右鍵 ? const int WM_RBUTTONUP = 0x205; ? //雙擊鼠標(biāo)右鍵 ? const int WM_RBUTTONDBLCLK = 0x206; ? //按下鼠標(biāo)中鍵 ? const int WM_MBUTTONDOWN = 0x207; ? const int WM_USER = 0x0400; ? const int MK_LBUTTON = 0x0001; ? const int MK_RBUTTON = 0x0002; ? const int MK_SHIFT = 0x0004; ? const int MK_CONTROL = 0x0008; ? const int MK_MBUTTON = 0x0010; ? const int MK_XBUTTON1 = 0x0020; ? const int MK_XBUTTON2 = 0x0040;

6. 結(jié)論

SendMessage是一個(gè)強(qiáng)大的工具,可以讓我們?cè)赪inform應(yīng)用中實(shí)現(xiàn)許多高級(jí)功能。但是,它也需要謹(jǐn)慎使用,因?yàn)椴划?dāng)使用可能會(huì)導(dǎo)致應(yīng)用程序出現(xiàn)問題。在使用SendMessage時(shí),務(wù)必充分了解每個(gè)消息的含義和可能的影響,并在必要時(shí)進(jìn)行適當(dāng)?shù)腻e(cuò)誤處理。


該文章在 2024/11/1 9:11:51 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 国产69| 在线综合亚洲欧美日韩手机版 | 国产欧美日韩中文字幕 | 日本黄页网站免费大全 | 免费观看国产一区二区三区 | 视频免费热播在线观看 | 欧美特黄一免在线观看 | 国产激情视频网站 | 男人猛躁进女人成人免 | 亚洲国产精品自产在线播放 | 中文字幕精品一区二区三区在线 | 国产亚洲午夜高清国产拍精品 | 欧美xxxx黑人又粗又长精品 | 天天综合网天天综合 | 亚洲欧洲欧美中文日韩 | 亚洲国产精品成 | 欧美疯狂黑人xxxxbbbb | 挤奶在线 | 在线观看第一页 | 免费国产小视频在线观看 | 欧美精品偷自拍另类在线观看 | 片专区成人 | 加勒比色 | 午夜男女刺激爽爽影院 | 国产精品福利片免费看 | 国产99久60在线视频 | 依依成人影院在线观看 | 国产一区二区三区视频在线观看 | 加勒比综合网 | 亚洲国产精品一区二区色99 | 日韩国产欧美视频在线播放 | 免费观看视频 | 找老女人泻火 | 国产绿奴视频在线观看 | 最新欧美精品一区二区三区 | 性欧美最新巨大乳 | 亚洲欧洲自拍拍偷午夜色 | 91精品视频在线观看免费 | 亚洲人免费视频 | 好姑娘视频观看免费完整版 | 午夜男女羞羞爽爽爽视频 |