问题描述
C#裡可以override窗體的WndProc,但WM_CLOSE這些常量在哪裡有定義呢?還有那些結構體的定義在哪裡
解决方案
解决方案二:
需要你自己定义。
解决方案三:
你可以从MSDN里找到相应的常量定义及结构定义,如果你安装了VC++那会更好,可以通过查找.H文件来找到定义。最简单的就是在IDE的文件查找里,输入常量名称,查找条件为.h来查找。
解决方案四:
如在WinUser.h文件里有如下的定义片段:#defineWM_SETFOCUS0x0007#defineWM_KILLFOCUS0x0008#defineWM_ENABLE0x000A#defineWM_SETREDRAW0x000B#defineWM_SETTEXT0x000C#defineWM_GETTEXT0x000D#defineWM_GETTEXTLENGTH0x000E#defineWM_PAINT0x000F#defineWM_CLOSE0x0010#ifndef_WIN32_WCE#defineWM_QUERYENDSESSION0x0011#defineWM_QUERYOPEN0x0013#defineWM_ENDSESSION0x0016#endif#defineWM_QUIT0x0012#defineWM_ERASEBKGND0x0014#defineWM_SYSCOLORCHANGE0x0015#defineWM_SHOWWINDOW0x0018
解决方案五:
引用1楼dancingbit的回复:
需要你自己定义。
Oh!MyGod!但我在WndProc裡用Debug.WriteLine(m.ToString());這樣把消息打印出來,也時輸出WM_CLOSE的字符串呢?我想在.net內部應該是有定義的
解决方案六:
WinForm的窗体和MFC类似都采用了Windows的原有的常量及结构。你只需去MSDN查找就可以了。这不是.net才有的。
解决方案七:
引用5楼hbxtlhx的回复:
WinForm的窗体和MFC类似都采用了Windows的原有的常量及结构。你只需去MSDN查找就可以了。这不是.net才有的。
我知道,我只是想確認一下,是不是.net裡沒有定義這些常量,是不是必須要手動加入
解决方案八:
当然要手动的来加入。你看到的那些常量的名字只不过是在.net内部把其使用Switch做了个处理。
解决方案九:
引用6楼fox1999的回复:
引用5楼hbxtlhx的回复:WinForm的窗体和MFC类似都采用了Windows的原有的常量及结构。你只需去MSDN查找就可以了。这不是.net才有的。我知道,我只是想確認一下,是不是.net裡沒有定義這些常量,是不是必須要手動加入
事实上.NetFramework在System.Windows.Forms中定义了windows的消息和结构体,在NativeMethods类中,但是由于其定义为"internalstaticclassNativeMethods",因此无法在System.Windows.Forms外使用,如果你不想查看msdn,你可以通过反编译该程序集的方法,将其中的消息定义copy下来使用即可。如下是其中一部分:publicconstintWH_GETMESSAGE=3;publicconstintWH_JOURNALPLAYBACK=1;publicconstintWH_MOUSE=7;publicconstintWHEEL_DELTA=120;publicconstintWINDING=2;publicconstintWM_ACTIVATE=6;publicconstintWM_ACTIVATEAPP=0x1c;publicconstintWM_AFXFIRST=0x360;publicconstintWM_AFXLAST=0x37f;publicconstintWM_APP=0x8000;publicconstintWM_ASKCBFORMATNAME=780;publicconstintWM_CANCELJOURNAL=0x4b;publicconstintWM_CANCELMODE=0x1f;publicconstintWM_CAPTURECHANGED=0x215;publicconstintWM_CHANGECBCHAIN=0x30d;publicconstintWM_CHANGEUISTATE=0x127;publicconstintWM_CHAR=0x102;publicconstintWM_CHARTOITEM=0x2f;publicconstintWM_CHILDACTIVATE=0x22;publicconstintWM_CHOOSEFONT_GETLOGFONT=0x401;publicconstintWM_CLEAR=0x303;publicconstintWM_CLOSE=0x10;publicconstintWM_COMMAND=0x111;publicconstintWM_COMMNOTIFY=0x44;publicconstintWM_COMPACTING=0x41;publicconstintWM_COMPAREITEM=0x39;publicconstintWM_CONTEXTMENU=0x7b;publicconstintWM_COPY=0x301;publicconstintWM_COPYDATA=0x4a;publicconstintWM_CREATE=1;publicconstintWM_CTLCOLOR=0x19;publicconstintWM_CTLCOLORBTN=0x135;publicconstintWM_CTLCOLORDLG=310;publicconstintWM_CTLCOLOREDIT=0x133;publicconstintWM_CTLCOLORLISTBOX=0x134;publicconstintWM_CTLCOLORMSGBOX=0x132;publicconstintWM_CTLCOLORSCROLLBAR=0x137;publicconstintWM_CTLCOLORSTATIC=0x138;publicconstintWM_CUT=0x300;publicconstintWM_DEADCHAR=0x103;publicconstintWM_DELETEITEM=0x2d;publicconstintWM_DESTROY=2;publicconstintWM_DESTROYCLIPBOARD=0x307;publicconstintWM_DEVICECHANGE=0x219;publicconstintWM_DEVMODECHANGE=0x1b;publicconstintWM_DISPLAYCHANGE=0x7e;publicconstintWM_DRAWCLIPBOARD=0x308;publicconstintWM_DRAWITEM=0x2b;
解决方案十:
当然,现在.netframework开源了,直接下源代码就可以复制了,不必要反编译了。
解决方案十一:
在NativeMethods类中,但是由于其定义为"internalstaticclassNativeMethods"暈了