c# 重載WndProc,實(shí)現(xiàn)重寫“最小化”的實(shí)現(xiàn)方法
更新時(shí)間:2009年02月14日 14:18:51 作者:
在做“亦歌桌面版”的時(shí)候,發(fā)現(xiàn)當(dāng)打開歌詞狀態(tài)下,用最小化隱藏窗體到托盤的話(如下code #1),在調(diào)出發(fā)現(xiàn)歌詞縮小了(雖然顯現(xiàn)的窗體大小跟剛才一樣),從這點(diǎn)看調(diào)用該方法其實(shí)窗體大小是改變了的(這個(gè)過程只是不可視而已)。
code #1
private void Form1_SizeChanged(object sender, EventArgs e) //最小化隱藏窗體
{
if (this.WindowState == FormWindowState.Minimized)//窗體狀態(tài)為最小化
{
StopRectTimer.Enabled = false;
this.Visible = false;
this.notifyIcon1.Visible = true; //顯示系統(tǒng)托盤圖標(biāo)
this.notifyIcon1.Text = this.Text; //設(shè)置圖標(biāo)顯示的文本
this.ShowInTaskbar = false; //窗體在任務(wù)標(biāo)中隱藏
reghotkey();
打開OToolStripMenuItem.Text = "打開(&O)";
}
}
很顯然,如果打開歌詞狀態(tài)話的話,怎樣才能最小化而不改變窗體的大小呢?我想到了重載“最小化”,但是怎么重載呢?這里給出一種重載WndProc的方案:
const int WM_SYSCOMMAND = 0x112;
const int SC_CLOSE = 0xF060;
const int SC_MINIMIZE = 0xF020;
const int SC_MAXIMIZE = 0xF030;
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_SYSCOMMAND)
{
if (m.WParam.ToInt32() == SC_MINIMIZE)
{
this.Visible = false;
return;
}
}
base.WndProc(ref m);
}
復(fù)制代碼 代碼如下:
private void Form1_SizeChanged(object sender, EventArgs e) //最小化隱藏窗體
{
if (this.WindowState == FormWindowState.Minimized)//窗體狀態(tài)為最小化
{
StopRectTimer.Enabled = false;
this.Visible = false;
this.notifyIcon1.Visible = true; //顯示系統(tǒng)托盤圖標(biāo)
this.notifyIcon1.Text = this.Text; //設(shè)置圖標(biāo)顯示的文本
this.ShowInTaskbar = false; //窗體在任務(wù)標(biāo)中隱藏
reghotkey();
打開OToolStripMenuItem.Text = "打開(&O)";
}
}
很顯然,如果打開歌詞狀態(tài)話的話,怎樣才能最小化而不改變窗體的大小呢?我想到了重載“最小化”,但是怎么重載呢?這里給出一種重載WndProc的方案:
復(fù)制代碼 代碼如下:
const int WM_SYSCOMMAND = 0x112;
const int SC_CLOSE = 0xF060;
const int SC_MINIMIZE = 0xF020;
const int SC_MAXIMIZE = 0xF030;
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_SYSCOMMAND)
{
if (m.WParam.ToInt32() == SC_MINIMIZE)
{
this.Visible = false;
return;
}
}
base.WndProc(ref m);
}
相關(guān)文章
C#運(yùn)算符大全_各種運(yùn)算符號的概述及作用
以下是對C#中各種運(yùn)算符號的說明及作用進(jìn)行了詳細(xì)的總結(jié)介紹,需要的朋友可以過來參考下,希望對大家有所幫助2013-10-10
C#文字識別API場景解析、表格識別提取功能實(shí)現(xiàn)
文章介紹了基于深度學(xué)習(xí)算法和自主OCR核心技術(shù)提供的文字識別API,該API能夠適應(yīng)各種復(fù)雜場景,高效、精準(zhǔn)地識別印刷體和手寫體文字,并支持批量識別,文章以身份證識別接口為例,介紹C#文字識別API場景解析、表格識別提取功能,感興趣的朋友一起看看吧2024-11-11
winform中的ListBox和ComboBox綁定數(shù)據(jù)用法實(shí)例
這篇文章主要介紹了winform中的ListBox和ComboBox綁定數(shù)據(jù)用法,實(shí)例分析了將集合數(shù)據(jù)綁定到ListBox和ComboBox控件的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2014-12-12
C#中Sleep() 和 Wait()的區(qū)別小結(jié)
Sleep()和 Wait()是兩個(gè)不同的方法,用于控制線程的執(zhí)行,本文主要介紹了C#中Sleep()和Wait()的區(qū)別小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下2024-04-04
c#中SAPI使用總結(jié)——SpVoice的使用方法
最近使用C#重做了點(diǎn)名系統(tǒng)(要用到TTS,讓計(jì)算機(jī)點(diǎn)名)使用了SAPI,在這里總結(jié)一下SpVoice的使用方法。2011-10-10

