如何使多行文本框的制表位在Win32api应用程序中工作

受够了

我在这里用c编写了一个win32api应用程序。主窗口中的所有控件都是手动创建的,如下所示:

hEditSource = CreateWindowEx(WS_EX_CLIENTEDGE, L"EDIT", NULL,
                WS_VISIBLE | WS_CHILD | WS_TABSTOP | ES_MULTILINE | ES_READONLY,
                someLeft, someTop, someWidth, someHeight,
                hWndMain, NULL, hInst, NULL);

最初,我没有在主消息循环中应用IsDialogMessage测试,因此所有控件的制表位都无法使用。现在我完成了,除了上面的多行文本框之外,每个控件都可以。确实,当按Tab键时,什么也不会发生。没有焦点移动,没有制表符插入(此后将丢弃只读样式)。

其他文本框都是单行的,如下所示:

editSearch = CreateWindowEx(WS_EX_CLIENTEDGE, L"EDIT", NULL,
               WS_VISIBLE | WS_CHILD | ES_AUTOHSCROLL | WS_TABSTOP,
               someLeft, someTop, someWidth, someHeight,
               hWndMain, NULL, hInst, NULL);

似乎与多个线条样式相关的是原因。但是在C#winform中,使用有效的制表位可以轻松创建多行编辑(这是文本框的默认行为,无论它是多行)。我尝试使用spy ++,以查找窗口样式中是否有任何线索。但是,如果唯一的不同是“ Accept Tab”属性,则两个文本框的窗口样式相同。

现在,我找不到找到根本原因的另一种方法。有人有线索吗?任何帮助将不胜感激。

大卫·赫弗南(David Heffernan)

IsDialogMessage控件的响应方式会影响的行为WM_GETDLGCODE作为记载,对于多行编辑控件以下是默认窗口过程返回:

 DLGC_WANTCHARS | DLGC_HASSETSEL | DLGC_WANTARROWS | DLGC_WANTALLKEYS

包括DLGC_WANTALLKEYS停止IsDialogMessage响应TAB并将焦点移至下一个控件。因此,您将需要对多行编辑控件进行子类化并删除该标志。子类化的窗口过程可能如下所示:

LRESULT CALLBACK MultiLineEditWndProc(HWND hWnd, UINT message, WPARAM wParam, 
    LPARAM lParam)
{
    LRESULT res = CallWindowProc(wpOld, hWnd, message, wParam, lParam);
    switch (message)
    {
    case WM_GETDLGCODE:
        res &= ~DLGC_WANTALLKEYS;
    }
    return res;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在闪亮的应用程序中打印用户构建的多行文本?

来自分类Dev

C ++如何使用Win32 API通过线程从文本框中获取文本

来自分类Dev

如何在php文本框中遍历多行文本?

来自分类Dev

从多行文本框中获取所有行

来自分类Dev

删除多行文本框中的特定行

来自分类Dev

如何避免在Windows应用程序的文本框中输入特殊字符

来自分类Dev

如何使用Windows窗体应用程序获取文本框中的文件路径?

来自分类Dev

如何在文本框中编写应用程序版本

来自分类Dev

如何在我的 Python 应用程序中添加自定义 tkinter 文本框?

来自分类Dev

当 WPF 应用程序中的文本框输入更改时,如何更改主窗口颜色?

来自分类Dev

如何使用C#在PowerPoint TaskPane上限制多行文本框中每行的长度?

来自分类Dev

如何使用C#在多行文本框中获取LineHeight / FontHeight?

来自分类Dev

如何增加asp.net多行文本框中的行距?

来自分类Dev

如何从多行文本框到单个文本框获取行?

来自分类Dev

Windows Phone多行文本框

来自分类Dev

动态禁用多行文本框

来自分类Dev

显示折断多行文本框

来自分类Dev

多行文本框断字符

来自分类Dev

在Visual Basic中的多行文本框中传输固定单词以分隔单行文本框

来自分类Dev

突出显示(选择)多行文本框中的最后一行文本

来自分类Dev

如何包装具有预配置宽度的多行文本框(Web控件)中的输出文本?

来自分类Dev

从另一个应用程序中的文本框中读取文本

来自分类Dev

为应用程序中的所有文本框选择文本框中的所有文本

来自分类Dev

使用C#获取在其他应用程序的文本框中输入的文本

来自分类Dev

如何在我的所有应用程序中限制所有文本框条目 - jquery

来自分类Dev

如何使用for循环在c#windows窗体应用程序中检查文本框是否为空,使用数组

来自分类Dev

如何从另一个应用程序的文本框中获取插入符的位置?(不是坐标,而是文本框内的实际索引)

来自分类Dev

弹出框中的文本框在WPF应用程序中没有得到关注

来自分类Dev

如何移动到下一个文本框以形成多行文本框

Related 相关文章

  1. 1

    如何在闪亮的应用程序中打印用户构建的多行文本?

  2. 2

    C ++如何使用Win32 API通过线程从文本框中获取文本

  3. 3

    如何在php文本框中遍历多行文本?

  4. 4

    从多行文本框中获取所有行

  5. 5

    删除多行文本框中的特定行

  6. 6

    如何避免在Windows应用程序的文本框中输入特殊字符

  7. 7

    如何使用Windows窗体应用程序获取文本框中的文件路径?

  8. 8

    如何在文本框中编写应用程序版本

  9. 9

    如何在我的 Python 应用程序中添加自定义 tkinter 文本框?

  10. 10

    当 WPF 应用程序中的文本框输入更改时,如何更改主窗口颜色?

  11. 11

    如何使用C#在PowerPoint TaskPane上限制多行文本框中每行的长度?

  12. 12

    如何使用C#在多行文本框中获取LineHeight / FontHeight?

  13. 13

    如何增加asp.net多行文本框中的行距?

  14. 14

    如何从多行文本框到单个文本框获取行?

  15. 15

    Windows Phone多行文本框

  16. 16

    动态禁用多行文本框

  17. 17

    显示折断多行文本框

  18. 18

    多行文本框断字符

  19. 19

    在Visual Basic中的多行文本框中传输固定单词以分隔单行文本框

  20. 20

    突出显示(选择)多行文本框中的最后一行文本

  21. 21

    如何包装具有预配置宽度的多行文本框(Web控件)中的输出文本?

  22. 22

    从另一个应用程序中的文本框中读取文本

  23. 23

    为应用程序中的所有文本框选择文本框中的所有文本

  24. 24

    使用C#获取在其他应用程序的文本框中输入的文本

  25. 25

    如何在我的所有应用程序中限制所有文本框条目 - jquery

  26. 26

    如何使用for循环在c#windows窗体应用程序中检查文本框是否为空,使用数组

  27. 27

    如何从另一个应用程序的文本框中获取插入符的位置?(不是坐标,而是文本框内的实际索引)

  28. 28

    弹出框中的文本框在WPF应用程序中没有得到关注

  29. 29

    如何移动到下一个文本框以形成多行文本框

热门标签

归档