首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

netframework 界面重绘的处理,该如何解决

2012-01-30 
netframework 界面重绘的处理最近在看.netframework的源代码.当看到winform的ListBox控件时,知道它是用Dra

netframework 界面重绘的处理
最近在看   .netframework   的源代码.
当看到winform   的   ListBox   控件时,知道它是用   DrawItem   事件来绘制子项目的
但我在它的代码中看到它是这样调用的.
private   void   WmReflectDrawItem(ref   Message   m)
{
    ...具体函数实现略过
        //此处调用   OnDrawIten
        this.OnDrawItem(new   DrawItemEventArgs(graphics,   this.Font,   rect,   lParam.itemID,   (DrawItemState)   lParam.itemState,   this.ForeColor,   this.BackColor));
}

那么   WmReflectDrawItem   又是在哪调用的呢,我再查,发现是在   WndProc,   也就是控件的主消息循环中
protected   override   void   WndProc(ref   Message   m)
{
        int   msg   =   m.Msg;
        switch   (msg)
        {
                case   0x202b:
                        this.WmReflectDrawItem(ref   m);
                        return;

                case   0x202c:
                        this.WmReflectMeasureItem(ref   m);
                        return;

                case   0x317:
                        this.WmPrint(ref   m);
                        return;

                default:
                        if   (msg   !=   0x2111)
                        {
                                goto   Label_029F;
                        }
                        this.WmReflectCommand(ref   m);
                        return;
        }
}
函数调用是明白了,问题也就来了,以上这几个消息ID(0x202B,0x2111等)我从没见过,在   winuser.h   中也查不到,且值都大于   WM_USER   (0x0400), 而且我发现很多控件中都有   WmReflectCommand,   WmReflectDrawItem   等函数,其对应的消息ID都一样,   难道是   windows的隐藏消息.
望高人解答.

[解决办法]
因该是.net的新消息吧
[解决办法]
顺便问下lz看到移动窗体时候的消息是什么了么?
记得以前处理移动的时候有个消息和sizechange有关
[解决办法]
不好意思,我问一下,你看的是哪里的源代码?


[解决办法]
应该是新消息。
[解决办法]
我感觉像是项目自定义的消息,所以才会使用WM_USER大的值。
[解决办法]
http://msdn2.microsoft.com/zh-tw/library/system.windows.forms.listbox.wmreflectcommand(VS.80).aspx

[解决办法]
JF
[解决办法]
JF
[解决办法]
hbxtlhx(平民百姓) ( ) 信誉:112 Blog 加为好友 2007-05-11 13:13:48 得分: 0


你可以如下得到这些消息的字符描述:
protected override void WndProc(ref Message m)
{
Console.WriteLine(m);
base.WndProc(ref m);
}



这个是输出到哪里的?如何输出到即时窗口啊?

热点排行