- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个 WIN32 所有者绘制的静态控件,它使用两个源图像(填充和未填充)绘制进度条。在初始绘制时效果很好:
case WM_DRAWITEM:
{
DRAWITEMSTRUCT* draw = (DRAWITEMSTRUCT*)lparam;
// Manually draw the progress bar.
if( draw->hwndItem == hwndProgress )
{
// Progress bar is 526 pixels wide.
int left = progressPercent * 526 / 100;
// Paint sections of window with filled and unfilled bitmaps
// based on progress bar position.
HDC hdcMem = ::CreateCompatibleDC(draw->hDC);
::SelectObject(hdcMem, hBmpProgressFull);
::BitBlt(draw->hDC, 0, 0, left, 36, hdcMem, 0, 0, SRCCOPY);
::DeleteDC(hdcMem);
HDC hdcMem2 = ::CreateCompatibleDC(draw->hDC);
::SelectObject(hdcMem2, hBmpProgressEmpty);
::BitBlt(draw->hDC, left, 0, 526-left, 36, hdcMem2, left, 0, SRCCOPY);
::DeleteDC(hdcMem2);
return TRUE;
}
}
return 0;
但是,我似乎无法正确删除和重新绘制。我已经尝试使用 WM_PAINT 和 RedrawWindow 发送消息,但没有一个工作得很好:
bool SetLoginProgressBar(float value)
{
if( hwndProgress != NULL )
{
progressPercent = (int)(value * 100.0);
//::RedrawWindow(hwndProgress, NULL, NULL, RDW_INVALIDATE|RDW_INTERNALPAINT);
::SendMessage(hwndProgress, WM_PAINT, NULL, NULL);
}
return true;
}
它没有使用新值重新绘制窗口,它只是与最初绘制的图像一起坐在那里并忽略进一步的绘制命令。它为初始值正确绘制进度,无论是 0%、50% 等,我可以验证我的 WM_DRAWITEM 消息处理程序代码是否被调用。
那么,在WIN32中告诉这个控件删除重绘的正确方法是什么?
我是否可能需要执行类似 BeginPaint/EndPaint 之类的操作,或者删除我已传递的 DRAWITEMSTRUCT 中的 hDC?
最佳答案
在销毁 DC 之前,您并没有从内存 DC 中取消选择位图。也许位图处于 Windows 不允许您再次选择它们的状态,因此 BitBlts 失败。
附言RedrawWindow 是我在这种情况下使用的。 InvalidateRect 也有效,但前提是您的消息循环正在运行。这引出了另一个观察结果:如果您正在进行长时间运行的操作,您可能无法返回到消息循环并且您的应用程序将看起来已挂起,包括进度窗口的更新。
关于c++ - WIN32 : How Do I Tell an Owner Drawn Static Control to Refresh Itself?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6471712/
我正在为 wordpress 制作一个菜单,我正在尝试获得一个“画出”像边框一样围绕着不同的菜单项。 至于现在,我有一个带有“绘制”圆圈的背景。 (我们称之为 bg.png)。 我可以得到一个菜单项周
我正在关注 this guide我正在尝试在屏幕上绘制一个四边形。我还看到了源代码,它是一样的,应该可以工作,但在我的例子中,屏幕上没有显示任何内容。我将 OpenGL 2.0 与顶点着色器一起使用,
我正在尝试使用 DirectX (10) 开发一个程序以在屏幕上显示。 问题是,它只显示我用来清除后备缓冲区的颜色。 (我为接下来的大量代码道歉)。 这是我的渲染函数: void DXEngine::
我遇到了一个奇怪的错误,即 tableViewCell 页脚在启动时未正确绘制。但是一旦细胞被回收,它们就会按预期出现。这是一个屏幕录像(注意回收后顶部单元格页脚的显示方式):https://www.
将Mathematica中的手绘对象与以编程方式生成的对象分开的最简单/最方便的方法是什么? 交互式绘图工具既方便又有用。但是,如果我在图的顶部绘制一些东西,则一旦重新生成图,它将丢失。有一个方便的解
我有一个所有者绘制的 TListBox (lbVirtualOwnerDraw),其内容会动态更新(每秒最多可以有 10 次更新)。列表框中一次最多可以包含 300 个项目。每个项目可能有大约 5 行
我正在使用以下代码段使用 SVG 绘制圆弧: https://jsfiddle.net/e6dx9oza/293/ 在调用describeArc方法计算路径时,会动态传入圆弧的起点和终点 Angula
请观看显示共享元素 Activity 转换的视频。这是从列表 Activity 到详细信息 Activity 的过渡。 [视频链接失效] 如您所见, ImageView 绘制在选项卡的前面。 我期望的
我有一个 wx.ScrolledWindow,它是使用 cairo 绘制的。我已经实现了缩放功能,现在可以重新绘制整个内容。但由于要绘制多达 200 条曲线,我应该考虑一个性能更高的解决方案。 我想到
我正在尝试旋转 Sprite ,同时保持相同的位置。 我将如何连续旋转 Canvas 上绘制的图像? 例如,我的假设是每 300 毫秒使用 setInterval 调用一个函数,但我不知道如何在 Ca
我正在尝试按照此处的示例以相同颜色绘制所有轮廓线:http://gnuplot.sourceforge.net/demo/contours.25.gnu 但是,该示例有效,但我自己的代码不起作用: s
我想要实现的是混合,我在彼此之上绘制两个四边形,都是透明的,最后绘制的四边形将完全取消前一个四边形的颜色,就好像它从未存在过一样。然而,除了那个其他四边形之外,它可能不会影响其后面的任何东西。因为我不
我尝试使用 Opencv4Android 2.4.6 在 Android 中进行快速角点检测。检测到关键点,但 View 未显示绘制的关键点,或 Features2d.drawKeypoints 不工
所以我正在做 Java 入门类(class)的项目,似乎我选择了一些超出我能力范围的东西。 :P 任何帮助将不胜感激。这就是我遇到的问题: You have a cursor that is cont
根据我的正常 Activity 经验,我的印象是 onResume()函数,您可以对 View 执行操作,并且它们已经呈现到屏幕上。 但是,我现在将一些代码转换为 Fragment在onResume(
我有一个顶点为 (0,0)、(100,0)、(100,100) 和 (0,100) 的多边形。我调试了程序,这些正是 java 正在绘制的线条。有些线条太长一个像素,而不是绘制一个精确的正方形: ht
我对 iPhone 开发非常陌生。 我使用 XCode 4 中的 Interface Builder 绘制了一个 View 。目前,里面唯一的东西是一个标签(取自 Interface Builder
我试图在其中一个表格单元格内绘制 svg 图像,但它根本不起作用。我看到了 div 但没有 svg 图像。如果我从 html 代码 () 创建 div 但从 javascript 中创建它不起作用..
我在 HighCharts 上遇到问题。 我必须使用 ajax 从 xml 内容中收集数据,以便将其绘制在 HighCharts 图表中。 我得到了我的数据。当我将鼠标移到它上面时,我可以看到我的点,
我正在使用自定义 ListView 选择器。一切正常,除了 state_focused 和 state_pressed 的可绘制对象绘制得比正常状态大。 我使用的是 ShapeDrawables,而不
我是一名优秀的程序员,十分优秀!