找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 5990|回复: 44

【VB6】【全网首发】在经典控件上使用UNICODE的方案(第2季)

[复制链接]
发表于 2022-5-25 20:39:29 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
首先致谢用户【系统消息】,他的一段提示给了我很大的帮助。本贴解决了在标题栏、菜单、标签、文本框、按钮、框架、列表框、组合框、单选按钮、多选按钮上使用UNICODE的困扰,而且没有使用非自带控件,不需要开启“XP风格”,纯粹就是API调用
+.png

解决方案:
游客,如果您要查看本帖隐藏内容请回复
代码:
游客,如果您要查看本帖隐藏内容请回复
使用微软控件的解决方案:https://www.0xaa55.com/thread-26612-1-1.html
各种WINDOWS控件使用范例大杂烩:https://www.0xaa55.com/thread-1421-1-3.html

本帖被以下淘专辑推荐:

回复

使用道具 举报

发表于 2022-5-26 18:42:44 | 显示全部楼层
本帖最后由 系统消息 于 2022-5-26 19:07 编辑

提示一下,HIWORD和LOWORD最好不要用除法运算,这个遇到负数的时候会有一些问题的。最好的是用结构体来做拆分:
  1. Type DWord
  2.         LoWord As Integer
  3.         HiWord As Integer
  4. End Type

  5. Declare Function SplitDWord Lib "msvbvm60" Alias "#644"(ByVal DWord As Long) As DWord

  6. Sub Test()
  7.         Dim dw As DWord
  8.         dw = SpliteDWord(&HA1B2C3D4)
  9.         ?Hex$(dw.LoWord), Hex$(dw.HiWord)        ' 输出:C3D4        A1B2
  10. End Sub
复制代码

同理,我们也可以用此方法来拆分RGBA颜色:
  1. Type RGBAColor
  2.         Red As Byte
  3.         Green As Byte
  4.         Blue As Byte
  5.         Alpha As Byte
  6. End Type

  7. Declare Function SplitRGBA Lib "msvbvm60" Alias "#644"(ByVal Color As ColorConstants) As RGBAColor
复制代码
回复 赞! 1 靠! 0

使用道具 举报

发表于 2022-5-25 21:35:53 | 显示全部楼层
竟然使用障眼法!假装用的是原生控件,但直接用 API 创建了控件。

不过很可能这个 Combobox 是可以找到办法像 YY菌 说的那样用 CallWindowProcW 设置 Unicode 的。
回复 赞! 靠!

使用道具 举报

发表于 2022-5-25 23:46:54 | 显示全部楼层
0xAA55 发表于 2022-5-25 21:35
竟然使用障眼法!假装用的是原生控件,但直接用 API 创建了控件。

不过很可能这个 Combobox 是可以找到办 ...

combox可以直接使用ImageCombo 那玩意就是系统原生的
回复 赞! 靠!

使用道具 举报

发表于 2022-5-26 09:19:33 | 显示全部楼层
非常感谢~~支持~~~
回复 赞! 靠!

使用道具 举报

发表于 2022-5-26 10:23:59 | 显示全部楼层
障眼法可还行,这不是变成自欺欺人了吗,
回复 赞! 靠!

使用道具 举报

发表于 2022-5-26 17:11:50 | 显示全部楼层
WeaponJang 发表于 2022-5-26 10:23
障眼法可还行,这不是变成自欺欺人了吗,

这不叫自欺欺人,这叫实现功能。程序员的事能叫自欺欺人吗?

点评

我还知道创建BUTTON有4种方法呢:拖动控件、DIALOG资源、调用API、自绘。  发表于 2022-5-26 17:18
回复 赞! 靠!

使用道具 举报

发表于 2022-5-27 06:44:59 | 显示全部楼层
认真学习
回复

使用道具 举报

发表于 2022-5-27 06:47:43 | 显示全部楼层
我觉得子类化要想个办法 不然加多少个控件 就要声明多少个 函数指针变量 有点挫
是不是这样?

点评

可以共用一个WndProc,只要你分得清。  发表于 2022-5-29 04:57
你可以用我搞的安全子类化组件,不仅解决每个控件都要单独一个消息处理函数的问题,还解决了在IDE下断点调试子类化的问题。  发表于 2022-5-27 16:55
回复 赞! 靠!

使用道具 举报

发表于 2022-5-27 12:48:45 | 显示全部楼层
就我不回复看不见是吗( qaq
回复 赞! 靠!

使用道具 举报

 楼主| 发表于 2022-5-29 04:52:38 | 显示全部楼层
系统消息 发表于 2022-5-26 18:42
提示一下,HIWORD和LOWORD最好不要用除法运算,这个遇到负数的时候会有一些问题的。最好的是用结构体来做拆 ...

本意上是不想调用API,如果要调用API的话,直接用RtlMoveMemory不就行了。
  1. dim words(1) as integer
  2. RtlMoveMemory varptr(words(0)),varptr(dword),4
  3. loword=words(0)
  4. hiword=words(1)
复制代码

点评

VB的数组效率比结构体低,另外RltMoveMemory也比VarPtr慢。我的意思主要是除非运算会有负数问题,重新声明一下VarPtr函数原型是目前的最佳方案。  发表于 2022-5-30 09:32
回复 赞! 靠!

使用道具 举报

发表于 2022-5-30 21:32:00 | 显示全部楼层
tlwh163 发表于 2022-5-27 06:47
我觉得子类化要想个办法 不然加多少个控件 就要声明多少个 函数指针变量 有点挫
是不是这样? ...

你的这个问题我早已解决了,我以前写过一个安全子类化组件,可以在类模块(包括窗体、用户控件等)中用WithEvents事件的方式来接收窗口消息,并且在IDE中断点调试不会崩溃。

SafeSubclass-V0_1.zip

6.5 KB, 阅读权限: 10, 下载次数: 17

VB安全子类化

回复 赞! 靠!

使用道具 举报

发表于 2022-8-11 18:05:24 | 显示全部楼层
正好我写爬虫需要
因为现在的网页大多数都是UTF-8编码
回复 赞! 靠!

使用道具 举报

发表于 2022-9-18 06:24:02 | 显示全部楼层
第一季的我会了,看看第二季
回复 赞! 靠!

使用道具 举报

发表于 2023-4-7 23:52:23 | 显示全部楼层
感谢分享
回复

使用道具 举报

发表于 2023-4-9 16:06:59 | 显示全部楼层
纯粹就是API调用?
太神奇了!
回复 赞! 靠!

使用道具 举报

发表于 2023-4-24 15:32:56 | 显示全部楼层
膜拜下大佬
回复 赞! 靠!

使用道具 举报

发表于 2023-7-5 05:55:24 | 显示全部楼层
B6】【全网首发】在经典控件上使用UN
回复 赞! 靠!

使用道具 举报

发表于 2023-7-5 11:30:54 | 显示全部楼层
我也学习一下!
回复 赞! 靠!

使用道具 举报

发表于 2023-7-6 10:07:22 | 显示全部楼层
认真学习
回复

使用道具 举报

本版积分规则

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-12-14 08:18 , Processed in 0.054022 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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