问题标签 [windows-controls]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
winapi - Win32 编辑控件插入符号放置偏移
我在下面对我的问题进行了英文解释,但这是一个视觉问题,所以如果您不想全部阅读,请查看底部的图片)。
我正在为我的班级构建一个反向波兰符号计算器,我刚刚完成让我的 GUI 上的按钮控件能够将它们的值附加到工作正常的编辑控件,但是插入符号正在做一些奇怪的事情,我可以'找不到任何关于它的信息。
我向编辑控件发送一条自定义消息,它在其中找到控件中当前文本的长度,然后将插入符号放在文本的末尾,这样我就可以添加需要添加的文本(它与ES_RIGHT
),它再次工作得很好,但是当插入符号位于最正确的位置时,它实际上被放置在大多数任意数字的中间。
这似乎只发生在插入符号可以出现的最正确的位置(即插入符号直接位于前一个字符右侧的任何其他位置,因为它应该)并且我尝试使用代码将插入符号一直替换到右侧,使用我的键盘/鼠标放置它,并尝试调整窗口的尺寸,希望它只是我为它定义的宽度的偏移量,导致最后一个位置略微偏离,但问题仍然存在并且它很难读取文本字段中的最后一个字符。
相关代码:
问题图片:
c++ - C++ - 创建包含按钮和单击时静态文本的对话框
所以这个项目遵循我的最后一个问题。我实现了按钮并了解了如何在单击它们时呈现事件,这个问题是我正在努力解决的下一步。利用winapi,我想在窗口类上单击按钮时创建一个对话框,但我希望对话框获取另一个窗口类的属性,以便我可以将特定属性传递给它。我将如何处理这个?再次,我们将不胜感激一些演示代码!感谢您抽出宝贵的时间。
c# - Win Phone System.Windows.Controls.Control 未找到
我正在开发一个通用的 windows 8.1 应用程序,虽然我主要是在 windows phone 版本上工作。
System.Controls.control 应该适用于 windows phone,但是每当我将 System.Windows.Controls.dll 添加到我的 Win Phone 8.1 引用时,我的项目将无法编译,它会说:
无论我是否真的说“使用system.win ..”等,都会发生这种情况,只要我将它添加到我的项目引用中就会发生。这个 dll 来自我的 programfiles(x86)/microsoftsdks/silverlight 目录。
有关如何解决此问题的任何想法?
events - 让 ON_NOTIFY_RANGE 与 CSliderCtrl 一起工作
我的 Windows 窗体中有一组 CSliderCtrl,我需要从中接收通知。我正在使用 ON_NOTIFY_RANGE 声明将滑块更新映射到适当的处理程序。我的问题是唯一给我通知的事件是 NM_RELEASEDCAPTURE 事件。所以我的代码如下所示:
我曾尝试使用 WM_H/VSCROLL、TB_THUMBTRACK、TB_LINEUP/DOWN 和其他事件,但无论我使用鼠标还是键盘滚动,都没有通知我。它们只是使用以下代码创建的简单水平滚动条:
一分钱你的想法。
c# - 文件夹浏览器对话框组件未在 Windows 窗体中显示文件夹列表
我有一个 C# 库,其中包含我使用文件夹浏览器对话框组件来获取文件夹路径的表单。在使用自定义安装程序安装我的应用程序期间显示表单。单击浏览按钮以显示文件夹浏览器对话框时。对话框打开但没有文件夹列表,显示空白对话框,带有确定和取消按钮。我正在使用以下代码:
我该如何解决这个问题。谢谢
vb.net - 查找鼠标相对于控件的位置,而不是屏幕
我有一个名为BGImage
. 我希望当用户点击它时,我可以捕捉到鼠标相对于BGImage
.
我试过使用MousePosition
,却发现它在屏幕上给出了鼠标位置,而不是在 PictureBox 上。
所以我也尝试使用PointToClient
:
但这给了我位置{X=1866,Y=55}
,而我实际上点击了大约{X=516,Y=284}
.
我认为问题的出现是因为我已经全屏显示了我的程序并将 PictureBox 的位置设置为屏幕的中心(BGImage.Location = New Point((My.Computer.Screen.WorkingArea.Width / 2) - (1008 / 2), ((My.Computer.Screen.WorkingArea.Height / 2) - (567 / 2)))
)
我还应该提到 PictureBox 的大小是 1008 × 567 像素,我的屏幕分辨率是 1366 × 768。
有什么办法可以让鼠标位置相对于 BGImage 的位置?
c# - control method of worksheet is not available
I've encountered an odd problem in proggramming add-in for excel; i wanna add controls in excel, i used this code inspiring https://msdn.microsoft.com/en-us/library/cc442817.aspx
but controls method of worksheet is not available and i can't access it, i added Microsoft.Office.Tools.Excel.v4.0.Utilities.dll assembly and following statements
by the way I'm using office 2007 and vs 2013 so i changed office version to 12 in DebugInfoExeName.
c# - 如何获取动态添加到Windows Form c#中的控件的值?
我读了一些文章并没有解决我的问题,我的问题是在我尝试获取动态添加到 Windows 窗体中的控件(CheckBox 和 ComboBox)的值时,我需要知道 CheckBox 何时被选中(或未选中) 并且如果当我按下按钮时 ComboBox 为空(或不为空),则此按钮调用一个方法,在该方法中我验证所有组件是否为空,我按以下方式添加控件:
“我在 ComboBox 的情况下添加了数据库中的值,我省略了这部分。”
我尝试使用 foreach 获取值:
问题是我不知道如何知道控件(CheckBox 和 ComboBox)是否被选中或为空(视情况而定)。
非常感谢您的帮助,感谢您的宝贵时间。
c# - 将焦点切换到 c# 中枢轴控件中的不同选项卡
是否可以在 ac# uwp 应用程序的 Pivot 控件中使用代码在选项卡之间切换焦点?我尝试使用Pivot.SelectedIndex = 1;
,但这并不能解决问题。这是不可能的还是我做错了?
winapi - 您如何处理组合框的 WM_COMPAREITEM 消息?
我主要来自 .NET 背景,但对于 Windows 控件,特别是 ComboBox,我必须完成一项小任务。
我知道 ComboBox 需要 CBS_SORT 消息才能按字母顺序对项目进行排序。当我使用 CB_ADDSTRING 标志将字符串添加到组合框时,这对我来说很好。
我试图让 ComboBox 使用反向(或其他自定义)排序顺序。
如果我CreateWindow
用来制作组合框,有没有办法可以获取它返回的 HWND 并连接一个处理 WM_COMPAREITEM 消息的自定义方法?
这是来自 Microsoft 的文章,讨论了处理 WM_COMPAREITEM 消息。https://msdn.microsoft.com/en-us/library/windows/desktop/bb775791(v=vs.85).aspx
编辑: 我想一种解决方法是使用 CB_INSERTSTRING 标志进行自定义排序,但如果可以的话,我真的更喜欢在其他语言中实现类似于 CompareTo 的东西。
编辑: 值得一提的是调用 CreateWindow 的类(不使用 CBS_HASSTRINGS 标志)具有 WM_COMMAND 消息的消息处理程序。它在 HIWORD 中切换以处理诸如 CBN_SELCHANGE 之类的通知。
我查看了 Combo box 的文档,发现 CBN_SELCHANGE 和 WM_COMPAREITEM 之间存在细微差别。
当用户更改组合框列表框中的当前选择时,发送 CBN_SELCHANGE 通知代码。用户可以通过单击列表框或使用箭头键来更改选择。组合框的父窗口以 WM_COMMAND 消息的形式接收此通知,该消息在 wParam 参数的高位字中带有 CBN_SELCHANGE。
这就是关于 WM_COMPAREITEM 的内容
系统发送 WM_COMPAREITEM 消息以确定新项目在所有者绘制的组合框或列表框的排序列表中的相对位置。每当应用程序添加新项目时,系统都会将此消息发送给使用 CBS_SORT 或 LBS_SORT 样式创建的组合框或列表框的所有者。
据我所知,传递给 CreateWindow 方法的 DWORD 样式是WS_VISIBLE | WS_CHILD | WS_VSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWNLIST | CBS_SORT
也许问题是创建的组合框不是“所有者绘制的”组合框?如果是这种情况,我需要找到一种方法来做到这一点,但只处理 WM_COMPAREITEM 情况,而不处理任何其他自定义绘画代码。
更新 我创建了没有 CBS_HASSTRINGS 和 CB_OWNERDRAWFIXED 的 ComboBox(然后让我处理 WM_COMPAREITEM 消息)。
这是消息处理代码
来自 COMPAREITEMSTRUCT 的数据真的很奇怪。我按顺序将以下值添加到组合框中。
- 啊啊啊
- bbbb
- 这会触发 wm_compareitem
- iItemId1 为 0
- iItemId2 为 -1
- item1 为 0x00000000(空指针)
- item2 是 L"bbbb"
- (这会导致字符串比较失败,所以我只是强制返回-1)
- cccc
- iItemId1 为 0
- iItemId2 为 -1
- item1 为 0x00000000(空指针)
- item2 是 L"cccc"
- zzzz
- 年年
- xxxx
z,y 和 x 都遵循相同的模式。我可能在互联网上找到了另一个有同样问题的人。但很难确定。