|
1、消息过滤 如果为静态 就没法 设为虚函数??
2、WndProc默认消息处理函数为静态,怎么访问 非静态 _hWnd ??
我只是瞎捣鼓,
没实际需求,
这样编译出来全动态 空窗口 才95KB
空窗口.zip
(37.65 KB, 下载次数: 7)
- <火山程序 类型 = "通常" 版本 = 1 />
- 包 火山.程序
- 类 启动类 <公开 基础类 = 程序类>
- {
- 变量 win <公开 类型 = win>
- 方法 启动方法 <公开 类型 = 整数>
- {
- win.创建窗口 (, , , , , , , , )
- win.消息循环 ()
- 返回 (1)
- }
- #
- }
- 类 win <公开>
- {
- 变量 _hInstance <公开 类型 = 变整数 折叠>
- 变量 _AppIcon <公开 类型 = 变整数>
- 变量 _AppSmallIcon <公开 类型 = 变整数>
- 变量 _ArrowCursor <公开 类型 = 变整数>
- 变量 _HandCursor <公开 类型 = 变整数>
- 变量 _SizeAllCursor <公开 类型 = 变整数>
- 变量 _hFont <公开 类型 = 变整数>
- 变量 _hBoldFont <公开 类型 = 变整数>
- 变量 _hLinkFont <公开 类型 = 变整数>
- 变量 _hWnd <公开 类型 = 变整数>
- 变量 _strFile <公开 类型 = 文本型>
- 方法 类_初始化 <折叠>
- {
- @ @<_hInstance>=(INT_P)GetModuleHandle(NULL);
- _strFile = 取空白文本 (1024)
- @ GetModuleFileName(NULL,(LPWSTR)@<_strFile>.GetText(),255);
- 如果 (_AppIcon == 0)
- {
- @ @<_AppIcon>=(INT_P)LoadIcon((HINSTANCE)@<_hInstance>,(LPCWSTR)129);
- 如果 (_AppIcon != 0)
- {
- @ @<_AppSmallIcon>=(INT_P)LoadImage((HINSTANCE)@<_hInstance>,(LPCWSTR)129,IMAGE_ICON,16,16,LR_DEFAULTCOLOR);
- }
- }
- 如果 (_AppIcon == 0)
- {
- @ @<_AppIcon>=(INT_P)LoadIcon((HINSTANCE)@<_hInstance>,(LPCWSTR)128);
- 如果 (_AppIcon != 0)
- {
- @ @<_AppSmallIcon>=(INT_P)LoadImage((HINSTANCE)@<_hInstance>,(LPCWSTR)128,IMAGE_ICON,16,16,LR_DEFAULTCOLOR);
- }
- }
- 如果 (_AppIcon == 0)
- {
- @ @<_AppIcon> =(INT_P)LoadIcon((HINSTANCE)@<_hInstance>,(LPCWSTR)"DEFAULT_ICON");
- 如果 (_AppIcon != 0)
- {
- @ @<_AppSmallIcon>=(INT_P)LoadImage((HINSTANCE)@<_hInstance>,(LPCWSTR)"DEFAULT_ICON",IMAGE_ICON,16,16,LR_DEFAULTCOLOR);
- }
- }
- 如果 (_AppIcon == 0)
- {
- 变量 _hIcon <类型 = 变整数>
- @ SHFILEINFO psfi;
- @ SHGetFileInfo(@<_strFile>.GetText(),FILE_ATTRIBUTE_NORMAL,&psfi,348,SHGFI_ICON|SHGFI_LARGEICON);
- @ @<_hIcon>=(INT_P)psfi.hIcon;
- 如果 (_hIcon == 0)
- {
- @ SHGetFileInfo(_T("*.exe"),FILE_ATTRIBUTE_NORMAL,&psfi,348,SHGFI_ICON|SHGFI_LARGEICON|SHGFI_USEFILEATTRIBUTES);
- @ @<_hIcon>=(INT_P)psfi.hIcon;
- }
- _AppIcon = _hIcon
- }
- 如果 (_AppSmallIcon == 0)
- {
- 变量 _hIcon <类型 = 变整数>
- @ SHFILEINFO psfi;
- @ SHGetFileInfo(@<_strFile>.GetText(),FILE_ATTRIBUTE_NORMAL,&psfi,348,SHGFI_ICON|SHGFI_SMALLICON);
- @ @<_hIcon>=(INT_P)psfi.hIcon;
- 如果 (_hIcon == 0)
- {
- @ SHGetFileInfo(_T("*.exe"),FILE_ATTRIBUTE_NORMAL,&psfi,348,SHGFI_ICON|SHGFI_SMALLICON|SHGFI_USEFILEATTRIBUTES);
- @ @<_hIcon>=(INT_P)psfi.hIcon;
- }
- _AppSmallIcon = _hIcon
- }
- @ @<_ArrowCursor> = (INT_P)LoadCursor(0,IDC_ARROW);
- @ @<_HandCursor> = (INT_P)LoadCursor (0, IDC_HAND);
- @ @<_SizeAllCursor> = (INT_P)LoadCursor (0, IDC_SIZEALL);
- @ @<_hFont>=(INT_P)GetStockObject(DEFAULT_GUI_FONT);
- @ LOGFONT lf;
- @ GetObject((HANDLE)@<_hFont>,60,&lf);
- @ lf.lfWeight = 700;
- @ lf.lfUnderline = 0;
- @ @<_hBoldFont>=(INT_P)CreateFontIndirect(&lf);
- @ lf.lfWeight = 400;
- @ lf.lfUnderline = 1;
- @ @<_hLinkFont> = (INT_P)CreateFontIndirect(&lf);
- }
- 方法 注册类名 <类型 = 逻辑型 折叠 @禁止流程检查 = 真>
- 参数 lpClassName <类型 = 文本型>
- 参数 hInstance <类型 = 变整数 @默认值 = 0>
- {
- 如果 (hInstance == 0)
- {
- @ @<hInstance>=(INT_P)GetModuleHandle(NULL);
- }
- // @ WNDCLASSEX lpwcx;
- // @ lpwcx.cbSize =48;// LocalSize(lpwcx);
- // @ lpwcx.hIcon =0;// (HICON)@<_AppIcon>;
- // @ lpwcx.hCursor = (HCURSOR)@<_ArrowCursor>;
- // @ lpwcx.hbrBackground = (HBRUSH)16;
- // @ lpwcx.hIconSm =0;// (HICON)@<_AppSmallIcon>;
- // @ lpwcx.lpfnWndProc=(WNDPROC)@<WndProc>;
- // @ lpwcx.hInstance = (HINSTANCE)@<hInstance>;
- // @ lpwcx.lpszClassName =_T("asd"); //@<lpClassName>.GetText();
- // @ return (BOOL)RegisterClassEx(&lpwcx);
- @ WNDCLASS wc;
- @ wc.style = CS_HREDRAW | CS_VREDRAW;//
- @ wc.lpfnWndProc = (WNDPROC)@<WndProc>;
- @ wc.cbClsExtra = 0;
- @ wc.cbWndExtra = 0;
- @ wc.hInstance = (HINSTANCE)@<hInstance>;
- @ wc.hIcon = LoadIcon((HINSTANCE)@<hInstance>, MAKEINTRESOURCE(100));
- @ wc.hCursor = LoadCursor(nullptr, IDC_ARROW);
- @ wc.hbrBackground = (HBRUSH)16;
- @ wc.lpszMenuName = nullptr;
- @ wc.lpszClassName = @<lpClassName>.GetText();
- @ return (BOOL)RegisterClassW(&wc);
- }
- 方法 创建窗口 <公开 类型 = 变整数 折叠 @禁止流程检查 = 真>
- 参数 父窗口句柄 <类型 = 变整数 @默认值 = 0>
- 参数 窗口标题 <类型 = 文本型 @默认值 = "zyWin">
- 参数 左边 <类型 = 整数 @默认值 = 0>
- 参数 顶边 <类型 = 整数 @默认值 = 0>
- 参数 宽度 <类型 = 整数 @默认值 = 300>
- 参数 高度 <类型 = 整数 @默认值 = 200>
- 参数 风格 <类型 = 整数 @默认值 = 13565952>
- 参数 扩展风格 <类型 = 整数 @默认值 = 8>
- 参数 窗口类名 <类型 = 文本型 @默认值 = "zyWin">
- {
- 如果 (注册类名 (窗口类名))
- {
- @ @<_hWnd>=(INT_P)CreateWindowEx((DWORD)@<扩展风格>,(LPCWSTR)@<窗口类名>.GetText(),(LPCWSTR)@<窗口标题>.GetText(),(DWORD)@<风格>,(int)@<左边>,(int)@<顶边>,(int)@<宽度>,(int)@<高度>,(HWND)@<父窗口句柄>,NULL,(HINSTANCE)@<_hInstance>,NULL);
- @ SendMessage((HWND)@<_hWnd>,WM_SETICON,ICON_BIG,@<_AppIcon>);
- @ SendMessage((HWND)@<_hWnd>,WM_SETICON,ICON_SMALL,@<_AppSmallIcon>);
- @ ShowWindow((HWND)@<_hWnd>,SW_SHOW);
- 返回 (_hWnd)
- }
- 否则
- {
- 返回 (0)
- }
- }
- 方法 消息循环 <公开 折叠 @禁止流程检查 = 真>
- 参数 WinhWnd <类型 = 变整数 @默认值 = 0>
- {
- @ MSG msg;
- @ while (GetMessage (&msg,(HWND)@<WinhWnd>,0,0))
- @ {
- @ TranslateMessage (&msg);
- @ DispatchMessage (&msg);
- @ }
- }
- 方法 WndProc <静态 类型 = 变整数 @禁止流程检查 = 真>
- 参数 hWnd <类型 = 变整数>
- 参数 wMsg <类型 = 整数 注释 = "提供消息的具体值">
- 参数 wParam <类型 = 变整数 注释 = "提供消息所附带的参数1的值">
- 参数 lParam <类型 = 变整数 注释 = "提供消息所附带的参数2的值">
- {
- @ if(@<wMsg>==WM_DESTROY)
- @ {
- // @ if(hWnd==@<_hWnd>)
- // @ {
- @ PostQuitMessage(0);
- // @ }
- @ }
- 返回 (消息过滤 (hWnd, wMsg, wParam, lParam))
- }
- 方法 消息过滤 <公开 类型 = 变整数 返回值注释 = "返回真已处理" "//@虚拟方法" = 可覆盖 @禁止流程检查 = 真>
- 参数 hWnd <类型 = 变整数>
- 参数 wMsg <类型 = 整数 注释 = "提供消息的具体值">
- 参数 wParam <类型 = 变整数 注释 = "提供消息所附带的参数1的值">
- 参数 lParam <类型 = 变整数 注释 = "提供消息所附带的参数2的值">
- {
- @ return DefWindowProc((HWND)@<hWnd>,(UINT)@<wMsg>,(WPARAM)@<wParam>,(LPARAM)@<lParam>);
- }
- #
- }
复制代码
|
|