c# 重載WndProc,實(shí)現(xiàn)重寫“最小化”的實(shí)現(xiàn)方法
更新時間:2009年02月14日 14:18:51 作者:
在做“亦歌桌面版”的時候,發(fā)現(xiàn)當(dāng)打開歌詞狀態(tài)下,用最小化隱藏窗體到托盤的話(如下code #1),在調(diào)出發(fā)現(xiàn)歌詞縮小了(雖然顯現(xiàn)的窗體大小跟剛才一樣),從這點(diǎn)看調(diào)用該方法其實(shí)窗體大小是改變了的(這個過程只是不可視而已)。
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)文章
解析美國東部時間與北京時間相互轉(zhuǎn)換的實(shí)現(xiàn)代碼
本篇文章是對美國東部時間與北京時間相互轉(zhuǎn)換的實(shí)現(xiàn)代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05WPF輕松實(shí)現(xiàn)進(jìn)度條的示例代碼
WPF中的ProgressBar控件用于表示任務(wù)進(jìn)度,適用于文件下載、數(shù)據(jù)處理等場景,本文將通過XAML和C#代碼展示如何創(chuàng)建一個基本的WPF進(jìn)度條,并演示如何通過事件處理程序更新進(jìn)度條的值來模擬耗時操作,感興趣的小伙伴跟著小編一起來看看吧2024-12-12C#的FileInfo類實(shí)現(xiàn)文件操作實(shí)例
這篇文章主要介紹了C#的FileInfo類實(shí)現(xiàn)文件操作實(shí)例,比較實(shí)用的功能,需要的朋友可以參考下2014-07-07C# 導(dǎo)出Excel的6種簡單方法實(shí)現(xiàn)
C# 導(dǎo)出 Excel 的6種簡單方法:數(shù)據(jù)表導(dǎo)出到 Excel,對象集合導(dǎo)出到 Excel,數(shù)據(jù)庫導(dǎo)出到 Excel,微軟網(wǎng)格控件導(dǎo)出到 Excel,數(shù)組導(dǎo)出到 Excel,CSV 導(dǎo)出到 Excel,你都會了嗎?需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09WPF設(shè)置窗體可以使用鼠標(biāo)拖動大小的方法
這篇文章主要介紹了WPF設(shè)置窗體可以使用鼠標(biāo)拖動大小的方法,涉及針對窗口的操作與設(shè)置技巧,具有很好的借鑒價(jià)值,需要的朋友可以參考下2014-11-11