编辑控件未使用所选画笔完全重新绘制

2024-02-23

我有一个编辑控件,其背景颜色取决于用户输入的有效性。

如果输入有效,编辑控件应保持默认外观,否则背景颜色应更改为浅灰色。

我正在检查有效性EN_UPDATE处理程序,如果它无效,我存储HWND的编辑控件到vector.

视觉样式已启用。

当我改变鼠标指针的位置时,问题就出现了。让我描述一下:

  1. 我单击编辑控件并输入输入无效。

  2. 我将鼠标指针移到其他地方,但编辑控件仍然具有焦点。

  3. Now I delete invalid input by pressing backspace.

  4. 一旦输入有效,颜色就会正确变化,但边框变得更粗/更暗。

这些图片很能说明问题:

Edit control before typing in data: enter image description here

Edit control when user pastes invalid data ( mouse pointer is in grey area ): enter image description here

最后一个字符是r.

Now if mouse pointer is out of edit control's client area ( on dialog's client area for example ) and user deletes r here is what I get: enter image description here

注意较粗的边框。

当鼠标指针悬停在编辑控件上方时,它会正确重新绘制。

这是相关的代码片段(如果需要我可以提交一个小的SSCCE ) :

// minimal code snippet for EN_UPDATE
case WM_COMMAND:
{
    switch( LOWORD(wParam) )
    {
    case IDC_MYEDIT:
        {
            if( HIWORD(wParam) == EN_CHANGE )
            {
                if( /* invalid input */ )
                {
                    // store HWND into vector

                } 
                // InvalidateRect(...); // tried this too...
            }
        }
        break;

// minimal code snippet for WM_CTLCOLOREDIT
case WM_CTLCOLOREDIT:
    {
        if( /* this control is stored in vector */ )
        {
            //=== then this is invalid entry->paint it grey ===//

            // Needed SetBkMode for text's background transparency 
            SetBkMode( (HDC)wParam, TRANSPARENT ); 
            // return light gray brush 
            return (INT_PTR)( (HBRUSH)GetStockObject( LTGRAY_BRUSH ) );
        }
        else
            return DefWindowProc( ... );  // default processing
    }

我怎样才能解决这个问题?


我已经找到了解决我的问题的方法。我刚刚添加了RedrawWindow代替InvalidateRect 并命令重新绘制框架:

// minimal code snippet for EN_UPDATE
case WM_COMMAND:
{
    switch( LOWORD(wParam) )
    {
    case IDC_MYEDIT:
        {
            if( HIWORD(wParam) == EN_CHANGE )
            {
                if( /* invalid input */ )
                {
                    // store HWND into vector

                }

                // after finishing validation, redraw window INCLUDING THE FRAME
                // This solves the problem with edges entirely

                RedrawWindow( (HWND)lParam, NULL, NULL,
                    RDW_ERASE | RDW_FRAME | RDW_INVALIDATE );
            }
        }
        break;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编辑控件未使用所选画笔完全重新绘制 的相关文章

  • 如何验证文件名称在 Windows 中是否有效?

    是否有一个 Windows API 函数可以将字符串值传递给该函数 该函数将返回一个指示文件名是否有效的值 我需要验证文件名是否有效 并且我正在寻找一种简单的方法来完成此操作 而无需重新发明轮子 我正在直接使用 C 但针对的是 Win32
  • 如何在列表框项目之间画一条线

    我希望能够用水平线分隔列表框中的每个项目 这只是我用于绘制项目的一些代码 private void symptomsList DrawItem object sender System Windows Forms DrawItemEvent
  • C++ 子字符串返回错误结果

    我有这个字符串 std string date 20121020 我正在做 std cout lt lt Date lt lt date lt lt n std cout lt lt Year lt lt date substr 0 4 l
  • Newtonsoft JSON PreserveReferences处理自定义等于用法

    我目前在使用 Newtonsoft Json 时遇到一些问题 我想要的很简单 将要序列化的对象与所有属性和子属性进行比较以确保相等 我现在尝试创建自己的 EqualityComparer 但它仅与父对象的属性进行比较 另外 我尝试编写自己的
  • WPF 中的调度程序和异步等待

    我正在尝试学习 WPF C 中的异步编程 但我陷入了异步编程和使用调度程序的困境 它们是不同的还是在相同的场景中使用 我愿意简短地回答这个问题 以免含糊不清 因为我知道我混淆了 WPF 中的概念和函数 但还不足以在功能上正确使用它 我在这里
  • 指针问题(仅在发布版本中)

    不确定如何描述这一点 但我在这里 由于某种原因 当尝试创建我的游戏的发布版本进行测试时 它的敌人创建方面不起作用 Enemies e level1 3 e level1 0 Enemies sdlLib 500 2 3 128 250 32
  • C - 找到极限之间的所有友好数字

    首先是定义 一对友好的数字由两个不同的整数组成 其中 第一个整数的除数之和等于第二个整数 并且 第二个整数的除数之和等于第一个整数 完美数是等于其自身约数之和的数 我想做的是制作一个程序 询问用户一个下限和一个上限 然后向他 她提供这两个限
  • C 预处理器库

    我的任务是开发源分析工具C程序 并且我需要在分析本身之前预处理代码 我想知道什么是最好的图书馆 我需要一些重量轻 便于携带的东西 与其推出自己的 为什么不使用cpp这是的一部分gcc suite http gcc gnu org onlin
  • Json.NET - 反序列化接口属性引发错误“类型是接口或抽象类,无法实例化”

    我有一个类 其属性是接口 public class Foo public int Number get set public ISomething Thing get set 尝试反序列化Foo使用 Json NET 的类给我一条错误消息
  • 如果使用 SingleOrDefault() 并在数字列表中搜索不在列表中的数字,如何返回 null?

    使用查询正数列表时SingleOrDefault 当在列表中找不到数字时 如何返回 null 或像 1 这样的自定义值 而不是类型的默认值 在本例中为 0 你可以使用 var first theIntegers Cast
  • WPF TabControl,用C#代码更改TabItem的背景颜色

    嗨 我认为这是一个初学者的问题 我搜索了所有相关问题 但所有这些都由 xaml 回答 但是 我需要的是后台代码 我有一个 TabControl 我需要设置其项目的背景颜色 我需要在选择 取消选择和悬停时为项目设置不同的颜色 非常感谢你的帮助
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • 从路径中获取文件夹名称

    我有一些路c server folderName1 another name something another folder 我如何从那里提取最后一个文件夹名称 我尝试了几件事 但没有成功 我只是不想寻找最后的 然后就去休息了 Thank
  • Discord.net 无法在 Linux 上运行

    我正在尝试让在 Linux VPS 上运行的 Discord net 中编码的不和谐机器人 我通过单声道运行 但我不断收到此错误 Unhandled Exception System Exception Connection lost at
  • 实体框架 4 DB 优先依赖注入?

    我更喜欢创建自己的数据库 设置索引 唯一约束等 使用 edmx 实体框架设计器 从数据库生成域模型是轻而易举的事 现在我有兴趣使用依赖注入来设置一些存储库 我查看了 StackOverflow 上的一些文章和帖子 似乎重点关注代码优先方法
  • C++ 复制初始化和直接初始化,奇怪的情况

    在继续阅读本文之前 请阅读在 C 中 复制初始化和直接初始化之间有区别吗 https stackoverflow com questions 1051379 is there a difference in c between copy i
  • 如何使我的表单标题栏遵循 Windows 深色主题?

    我已经下载了Windows 10更新包括黑暗主题 文件资源管理器等都是深色主题 但是当我创建自己的 C 表单应用程序时 标题栏是亮白色的 如何使我自己的桌面应用程序遵循我在 Windows 中设置的深色主题 你需要调用DwmSetWindo
  • mysql-connector-c++ - “get_driver_instance”不是“sql::mysql”的成员

    我是 C 的初学者 我认为学习的唯一方法就是接触一些代码 我正在尝试构建一个连接到 mysql 数据库的程序 我在 Linux 上使用 g 没有想法 我运行 make 这是我的错误 hello cpp 38 error get driver
  • 防止索引超出范围错误

    我想编写对某些条件的检查 而不必使用 try catch 并且我想避免出现 Index Out of Range 错误的可能性 if array Element 0 Object Length gt 0 array Element 1 Ob
  • 恢复上传文件控制

    我确实阅读了以下帖子 C 暂停 恢复上传 https stackoverflow com questions 1048330 pause resume upload in c 使用 HTTP 恢复上传 https stackoverflow

随机推荐

  • Docker-compose:如何使用相同的网络地址从容器和主机访问 Localstack 资源

    我使用 docker compose 在 2 个独立的容器中运行 python API 和 Localstack 实例 以进行本地开发 该 API 有一个端点 可生成预签名的 AWS S3 URL 并重定向用户 以便直接从 S3 加载图像
  • 如何从私有模块中的公共函数引用私有类型?

    我想将类似的函数分组在一个文件中 这些函数需要返回一个非公开的类型 struct MyStruct mod my mod use super MyStruct There are other similar functions that a
  • 通过 INavigationProvider 将菜单项添加到主菜单但不显示?

    使用 Orchard cms 1 5 1 我创建了一个模块 其中包含从 Web 服务获取列表的控制器 我想在启用此模块时在主菜单中添加一个菜单项 为此我创建了 主菜单如下 public class MainMenu INavigationP
  • 如何获取 ESRI 地图 - Angular 的屏幕截图

    如何在 UI 上获取 Esri 地图当前状态的屏幕截图并将其从 Angular 下载为 Pdf 以下代码是我当前的 ts 代码 如果需要添加其他部分 请告诉我 esri map component html div div esri map
  • Javascript crc32 函数和 PHP crc32 不匹配

    我正在开发一个 web 应用程序 我想将 PHP 中服务器端生成的一些 crc32 值与我在 Javascript 中生成的一些 crc32 值进行匹配 两者都使用相同的输入字符串但返回不同的值 我在webtoolkit上找到了一个crc3
  • Python:有吸引力的、干净的、可打包的 Windows GUI 库 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我需要为最终用户下载的桌面应用程序创建一个简单的基于 Windows 的 GUI 该应用程序是用 python 编写的 并将打包为安装程序
  • 在c中读取/写入bmp文件

    我正在尝试处理 bmp 文件 首先 我尝试从 bmp 文件读取标题和数据并将其写入新文件 pragma pack push 1 Windows 3 x bitmap file header typedef struct char filet
  • golang http2 服务器推送的高级客户端

    golang 1 6 发布 支持 Http2 我在网上搜索 但找不到任何有关如何使用 Go 进行 Http2 服务器推送的示例 是否有为此实现的高级客户端 人们已经做过什么例子了吗 std 库中的 http2 实现不公开 http2 特定的
  • AngularJS 和 i18next

    我见过一些 Angular 的 i18n 插件 但我不想重新发明轮子 i18next 是一个很好的库 所以我打算使用它 我创建了一个指令 i18n 它只调用 i18n 库 define app jquery i18n function ap
  • 按年份划分的R组

    我将 csv 读入 R 现在我有了一个数据列表 head data Date Open High Low Close Volume 1 31 Dec 14 223 09 225 68 222 25 222 41 2402097 2 30 D
  • Android - 使用动画的工件

    应用发现的 3D 转换时 我遇到屏幕上的视觉伪影问题here http developer android com resources samples ApiDemos src com example android apis animat
  • d3.js - 变换和过渡,多行

    我已按照以下说明进行操作 http bost ocks org mike path http bost ocks org mike path 用于用单线创建单图并对其进行动画处理 并且 弄清楚如何在图表中创建多条线 在 D3 js 中绘制多
  • 代码以交互方式运行时显示结果,但从 shell 运行时不显示结果

    我从另一张海报上借用了这个科学记数法小脚本 以科学记数法显示小数 https stackoverflow com questions 6913532 python how to convert decimal to scientific n
  • 音频 API 示例中的“安全错误”代码:“1000”

    我试图重复这个例子here https wiki mozilla org Audio Data API Complete Example 3a Visualizing Audio Spectrum 但收到此错误 Security error
  • C# 中的 DataGridView 组合框单元格事件

    我想在 DataGridViewComboBox 中的项目发生更改时显示一条消息 我可以通过 datagridview CellbeginEdit 事件和 CellEndEdit 事件的帮助来部分执行它 但这还不够 我希望它发生在组合框选择
  • 如何在ios应用程序中播放RTMP视频流?

    嗨 我正在开发广播应用程序 我正在使用 Videocore 库 现在我如何在 ios 应用程序中播放该流视频 我尝试使用 MpMoviePlayer 但它不支持 rtmp 流 那么是否有任何第三方库可供 RTMP 支持的播放器使用 请帮助我
  • 未创建表 sqlite android

    我正在制作一个应用程序 我想在其中保存用户联系人详细信息 但是每当我尝试插入或选择某些值时 我都会收到错误 数据库代码 public class ContactsDatabase extends SQLiteOpenHelper priva
  • 获取Java中注解的参数值

    所以我有一个代码 Path foo public class Hello GET Produces text html public String getHtml Context Request request Context HttpSe
  • 扭曲的Python getPage

    我试图获得这方面的支持 但我完全感到困惑 这是我的代码 from twisted internet import reactor from twisted web client import getPage from twisted web
  • 编辑控件未使用所选画笔完全重新绘制

    我有一个编辑控件 其背景颜色取决于用户输入的有效性 如果输入有效 编辑控件应保持默认外观 否则背景颜色应更改为浅灰色 我正在检查有效性EN UPDATE处理程序 如果它无效 我存储HWND的编辑控件到vector 视觉样式已启用 当我改变鼠