递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 2943|回复: 0
打印 上一主题 下一主题

[视窗] API创建窗口,遇到些问题。。

[复制链接]

111

主题

613

帖子

2178

积分

金牌会员

Rank: 6Rank: 6

积分
2178
QQ
跳转到指定楼层
楼主
发表于 2023-7-18 00:30:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

1、消息过滤 如果为静态 就没法 设为虚函数??
2、WndProc默认消息处理函数为静态,怎么访问 非静态 _hWnd ??

我只是瞎捣鼓,
没实际需求,
这样编译出来全动态 空窗口 才95KB    空窗口.zip (37.65 KB, 下载次数: 7)

  1. <火山程序 类型 = "通常" 版本 = 1 />

  2. 包 火山.程序

  3. 类 启动类 <公开 基础类 = 程序类>
  4. {
  5.     变量 win <公开 类型 = win>

  6.     方法 启动方法 <公开 类型 = 整数>
  7.     {
  8.         win.创建窗口 (, , , , , , , , )
  9.         win.消息循环 ()
  10.         返回 (1)
  11.     }

  12.     #
  13. }

  14. 类 win <公开>
  15. {
  16.     变量 _hInstance <公开 类型 = 变整数 折叠>
  17.     变量 _AppIcon <公开 类型 = 变整数>
  18.     变量 _AppSmallIcon <公开 类型 = 变整数>
  19.     变量 _ArrowCursor <公开 类型 = 变整数>
  20.     变量 _HandCursor <公开 类型 = 变整数>
  21.     变量 _SizeAllCursor <公开 类型 = 变整数>
  22.     变量 _hFont <公开 类型 = 变整数>
  23.     变量 _hBoldFont <公开 类型 = 变整数>
  24.     变量 _hLinkFont <公开 类型 = 变整数>
  25.     变量 _hWnd <公开 类型 = 变整数>
  26.     变量 _strFile <公开 类型 = 文本型>

  27.     方法 类_初始化 <折叠>
  28.     {
  29.         @ @<_hInstance>=(INT_P)GetModuleHandle(NULL);
  30.         _strFile = 取空白文本 (1024)
  31.         @ GetModuleFileName(NULL,(LPWSTR)@<_strFile>.GetText(),255);
  32.         如果 (_AppIcon == 0)
  33.         {
  34.             @ @<_AppIcon>=(INT_P)LoadIcon((HINSTANCE)@<_hInstance>,(LPCWSTR)129);
  35.             如果 (_AppIcon != 0)
  36.             {
  37.                 @ @<_AppSmallIcon>=(INT_P)LoadImage((HINSTANCE)@<_hInstance>,(LPCWSTR)129,IMAGE_ICON,16,16,LR_DEFAULTCOLOR);
  38.             }
  39.         }
  40.         如果 (_AppIcon == 0)
  41.         {
  42.             @ @<_AppIcon>=(INT_P)LoadIcon((HINSTANCE)@<_hInstance>,(LPCWSTR)128);
  43.             如果 (_AppIcon != 0)
  44.             {
  45.                 @ @<_AppSmallIcon>=(INT_P)LoadImage((HINSTANCE)@<_hInstance>,(LPCWSTR)128,IMAGE_ICON,16,16,LR_DEFAULTCOLOR);
  46.             }
  47.         }
  48.         如果 (_AppIcon == 0)
  49.         {
  50.             @ @<_AppIcon> =(INT_P)LoadIcon((HINSTANCE)@<_hInstance>,(LPCWSTR)"DEFAULT_ICON");
  51.             如果 (_AppIcon != 0)
  52.             {
  53.                 @ @<_AppSmallIcon>=(INT_P)LoadImage((HINSTANCE)@<_hInstance>,(LPCWSTR)"DEFAULT_ICON",IMAGE_ICON,16,16,LR_DEFAULTCOLOR);
  54.             }
  55.         }
  56.         如果 (_AppIcon == 0)
  57.         {
  58.             变量 _hIcon <类型 = 变整数>
  59.             @ SHFILEINFO psfi;
  60.             @ SHGetFileInfo(@<_strFile>.GetText(),FILE_ATTRIBUTE_NORMAL,&psfi,348,SHGFI_ICON|SHGFI_LARGEICON);
  61.             @ @<_hIcon>=(INT_P)psfi.hIcon;
  62.             如果 (_hIcon == 0)
  63.             {
  64.                 @ SHGetFileInfo(_T("*.exe"),FILE_ATTRIBUTE_NORMAL,&psfi,348,SHGFI_ICON|SHGFI_LARGEICON|SHGFI_USEFILEATTRIBUTES);
  65.                 @ @<_hIcon>=(INT_P)psfi.hIcon;
  66.             }
  67.             _AppIcon = _hIcon
  68.         }
  69.         如果 (_AppSmallIcon == 0)
  70.         {
  71.             变量 _hIcon <类型 = 变整数>
  72.             @ SHFILEINFO psfi;
  73.             @ SHGetFileInfo(@<_strFile>.GetText(),FILE_ATTRIBUTE_NORMAL,&psfi,348,SHGFI_ICON|SHGFI_SMALLICON);
  74.             @ @<_hIcon>=(INT_P)psfi.hIcon;
  75.             如果 (_hIcon == 0)
  76.             {
  77.                 @ SHGetFileInfo(_T("*.exe"),FILE_ATTRIBUTE_NORMAL,&psfi,348,SHGFI_ICON|SHGFI_SMALLICON|SHGFI_USEFILEATTRIBUTES);
  78.                 @ @<_hIcon>=(INT_P)psfi.hIcon;
  79.             }
  80.             _AppSmallIcon = _hIcon
  81.         }
  82.         @ @<_ArrowCursor> = (INT_P)LoadCursor(0,IDC_ARROW);
  83.         @ @<_HandCursor> = (INT_P)LoadCursor (0, IDC_HAND);
  84.         @ @<_SizeAllCursor> = (INT_P)LoadCursor (0, IDC_SIZEALL);
  85.         @ @<_hFont>=(INT_P)GetStockObject(DEFAULT_GUI_FONT);
  86.         @ LOGFONT lf;
  87.         @ GetObject((HANDLE)@<_hFont>,60,&lf);
  88.         @ lf.lfWeight = 700;
  89.         @ lf.lfUnderline = 0;
  90.         @ @<_hBoldFont>=(INT_P)CreateFontIndirect(&lf);
  91.         @ lf.lfWeight = 400;
  92.         @ lf.lfUnderline = 1;
  93.         @ @<_hLinkFont> = (INT_P)CreateFontIndirect(&lf);


  94.     }

  95.     方法 注册类名 <类型 = 逻辑型 折叠 @禁止流程检查 = 真>
  96.     参数 lpClassName <类型 = 文本型>
  97.     参数 hInstance <类型 = 变整数 @默认值 = 0>
  98.     {
  99.         如果 (hInstance == 0)
  100.         {
  101.             @ @<hInstance>=(INT_P)GetModuleHandle(NULL);
  102.         }
  103.         // @ WNDCLASSEX lpwcx;
  104.         // @ lpwcx.cbSize =48;// LocalSize(lpwcx);
  105.         // @ lpwcx.hIcon =0;// (HICON)@<_AppIcon>;
  106.         // @ lpwcx.hCursor = (HCURSOR)@<_ArrowCursor>;
  107.         // @ lpwcx.hbrBackground = (HBRUSH)16;
  108.         // @ lpwcx.hIconSm =0;// (HICON)@<_AppSmallIcon>;
  109.         // @ lpwcx.lpfnWndProc=(WNDPROC)@<WndProc>;
  110.         // @ lpwcx.hInstance = (HINSTANCE)@<hInstance>;
  111.         // @ lpwcx.lpszClassName =_T("asd"); //@<lpClassName>.GetText();
  112.         // @ return (BOOL)RegisterClassEx(&lpwcx);
  113.         @ WNDCLASS wc;
  114.         @ wc.style          = CS_HREDRAW | CS_VREDRAW;//
  115.         @ wc.lpfnWndProc    = (WNDPROC)@<WndProc>;
  116.         @ wc.cbClsExtra     = 0;
  117.         @ wc.cbWndExtra     = 0;
  118.         @ wc.hInstance      = (HINSTANCE)@<hInstance>;
  119.         @ wc.hIcon          = LoadIcon((HINSTANCE)@<hInstance>, MAKEINTRESOURCE(100));
  120.         @ wc.hCursor        = LoadCursor(nullptr, IDC_ARROW);
  121.         @ wc.hbrBackground  = (HBRUSH)16;
  122.         @ wc.lpszMenuName   = nullptr;
  123.         @ wc.lpszClassName  =  @<lpClassName>.GetText();
  124.         @ return (BOOL)RegisterClassW(&wc);
  125.     }

  126.     方法 创建窗口 <公开 类型 = 变整数 折叠 @禁止流程检查 = 真>
  127.     参数 父窗口句柄 <类型 = 变整数 @默认值 = 0>
  128.     参数 窗口标题 <类型 = 文本型 @默认值 = "zyWin">
  129.     参数 左边 <类型 = 整数 @默认值 = 0>
  130.     参数 顶边 <类型 = 整数 @默认值 = 0>
  131.     参数 宽度 <类型 = 整数 @默认值 = 300>
  132.     参数 高度 <类型 = 整数 @默认值 = 200>
  133.     参数 风格 <类型 = 整数 @默认值 = 13565952>
  134.     参数 扩展风格 <类型 = 整数 @默认值 = 8>
  135.     参数 窗口类名 <类型 = 文本型 @默认值 = "zyWin">
  136.     {
  137.         如果 (注册类名 (窗口类名))
  138.         {
  139.             @ @<_hWnd>=(INT_P)CreateWindowEx((DWORD)@<扩展风格>,(LPCWSTR)@<窗口类名>.GetText(),(LPCWSTR)@<窗口标题>.GetText(),(DWORD)@<风格>,(int)@<左边>,(int)@<顶边>,(int)@<宽度>,(int)@<高度>,(HWND)@<父窗口句柄>,NULL,(HINSTANCE)@<_hInstance>,NULL);
  140.             @ SendMessage((HWND)@<_hWnd>,WM_SETICON,ICON_BIG,@<_AppIcon>);
  141.             @ SendMessage((HWND)@<_hWnd>,WM_SETICON,ICON_SMALL,@<_AppSmallIcon>);
  142.             @ ShowWindow((HWND)@<_hWnd>,SW_SHOW);
  143.             返回 (_hWnd)
  144.         }
  145.         否则
  146.         {
  147.             返回 (0)
  148.         }
  149.     }

  150.     方法 消息循环 <公开 折叠 @禁止流程检查 = 真>
  151.     参数 WinhWnd <类型 = 变整数 @默认值 = 0>
  152.     {
  153.         @ MSG msg;
  154.         @ while (GetMessage (&msg,(HWND)@<WinhWnd>,0,0))
  155.         @ {
  156.         @   TranslateMessage (&msg);
  157.         @   DispatchMessage (&msg);
  158.         @ }
  159.     }

  160.     方法 WndProc <静态 类型 = 变整数 @禁止流程检查 = 真>
  161.     参数 hWnd <类型 = 变整数>
  162.     参数 wMsg <类型 = 整数 注释 = "提供消息的具体值">
  163.     参数 wParam <类型 = 变整数 注释 = "提供消息所附带的参数1的值">
  164.     参数 lParam <类型 = 变整数 注释 = "提供消息所附带的参数2的值">
  165.     {
  166.         @ if(@<wMsg>==WM_DESTROY)
  167.         @ {
  168.         // @   if(hWnd==@<_hWnd>)
  169.         // @     {
  170.         @        PostQuitMessage(0);
  171.         // @     }
  172.         @ }
  173.         返回 (消息过滤 (hWnd, wMsg, wParam, lParam))
  174.     }

  175.     方法 消息过滤 <公开 类型 = 变整数 返回值注释 = "返回真已处理" "//@虚拟方法" = 可覆盖 @禁止流程检查 = 真>
  176.     参数 hWnd <类型 = 变整数>
  177.     参数 wMsg <类型 = 整数 注释 = "提供消息的具体值">
  178.     参数 wParam <类型 = 变整数 注释 = "提供消息所附带的参数1的值">
  179.     参数 lParam <类型 = 变整数 注释 = "提供消息所附带的参数2的值">
  180.     {
  181.         @ return DefWindowProc((HWND)@<hWnd>,(UINT)@<wMsg>,(WPARAM)@<wParam>,(LPARAM)@<lParam>);
  182.     }

  183.     #  
  184. }
复制代码


专业承接18-98岁xx的心理及生理教育辅导。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-11-24 14:50 , Processed in 0.092007 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表