2012-08-14 39 views
1

我正在查看發佈的代碼here,特別是SyntaxRichTextBox.cs在重寫方法WndProcWndProc覆蓋奇怪的消息,不能正確

這只是代碼中的錯字嗎?什麼窗口味精是0x00fWM_PAINT是否意味着0x0f?捕捉該消息的代碼的作者是什麼?

代碼:

protected override void WndProc(ref System.Windows.Forms.Message m) 
{ 
    if (m.Msg == 0x00f) 
    { 
     if (m_bPaint) 
      base.WndProc(ref m); 
     else 
      m.Result = IntPtr.Zero; 
    } 
    else 
     base.WndProc(ref m); 
} 
+6

'0x00f'和'0x0f'是相同的數字。 – 2012-08-14 18:33:44

+0

所以這是WM_Paint消息,爲什麼你想要在這段代碼中捕獲該消息? (OP URL中的代碼) – AnotherUser 2012-08-14 18:37:48

+2

好像任何人都需要更多的證明,這是一個很好的例子,說明在代碼中使用幻數是一個壞主意。如果有'公共const int WM_PAINT = 0x00f;',你不會感到困惑。 – 2012-08-14 19:47:30

回答

2

首先,詹姆斯McNellis建議在評論上述,0x00f併爲0x0F表示相同的號碼。我沒有檢查WM_PAINT消息的值,但代碼看起來像是處理這個消息。

它看起來像一個簡單的優化:如果m_bPaintfalse,跳過base.WndProc()調用。可能m_bPaint是一個標誌,表示有需要重繪的東西。

+0

正確的,具體來說,這段代碼可以被註釋爲「當m_bPaint被設置爲false時忽略WM_Paint」消息。 – 2012-08-14 18:42:07

+0

我明白這一點。但是在OP的URL中的代碼中,爲什麼作者想暫停繪畫。他在ProcessLines中專門設置了m_bPaint,它選擇線條的某些部分並突出顯示它們。爲什麼你不想在這個突出顯示中畫畫? – AnotherUser 2012-08-14 18:45:48

+0

最好的辦法是禁用代碼塊,看看會發生什麼。但快速瀏覽代碼表明,程序員正在設置選擇並更改選擇顏色以進行語法高亮顯示,並且不希望顯示這些部分結果。 – vhallac 2012-08-14 19:06:18