- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用标准按钮,如果我有 OK 和 Cancel,默认为 OK,我按下右箭头,Cancel 被选中,按下键盘上的 enter 键,Cancel 按钮函数被调用。
ownerdraw 按钮不会发生这种情况。如果我按向右箭头,则“取消”按钮获得焦点,但按键盘上的 enter 键则会调用“确定”按钮功能。
我怎样才能拥有一个具有标准行为的 ownerdraw 按钮?
这是我的课。
BEGIN_MESSAGE_MAP(CFlatButton, CButton)
//{{AFX_MSG_MAP(CMyClass)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CFlatButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: Add your code to draw the specified item
CDC dc;
dc.Attach(lpDrawItemStruct->hDC); //Get device context object
CRect rt;
rt = lpDrawItemStruct->rcItem; //Get button rect
UINT state = lpDrawItemStruct->itemState; //Get state of the button
if ( (state & ODS_SELECTED) )
dc.FillSolidRect(rt, RGB(255, 0, 0));
else
{
if ((state & ODS_DISABLED))
{
dc.FillSolidRect(rt, RGB(0, 255, 0));
}
else
{
if ((state & ODS_FOCUS)) // If the button is focused
{
// Draw a focus rect which indicates the user
// that the button is focused
dc.FillSolidRect(rt, RGB(0, 0, 255));
}
else
{
dc.FillSolidRect(rt, RGB(255, 255, 0));
}
}
}
dc.SetTextColor(RGB(255,255,255)); // Set the color of the caption to be yellow
CString strTemp;
GetWindowText(strTemp); // Get the caption which have been set
dc.DrawText(strTemp,rt,DT_CENTER|DT_VCENTER|DT_SINGLELINE); // Draw out the caption
dc.Detach();
}
最佳答案
主要是Dialog一般使用BS_DEFPUSHBUTTON和BS_PUSHBUTTON来表示,而ownerdraw标志与之互斥。
查看这篇文章:它解释了完整的背景: http://www.codeproject.com/Articles/1318/COddButton
关于c++ - OwnerDraw CButton mfc 焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31021442/
TDBLookupListBox(我正在使用Delphi Xe5)没有onDraw事件。我需要根据某些字段的值更改列表中显示的项目的文本颜色(或文本的背景颜色)。例如,如果显示要选择的员工列表,则以灰
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwner
我想将复选框添加到我的 CListCtrl 派生类中,该类具有 LVS_OWNERDRAWFIXED 样式,用于在任何子项中绘制它们。我可以在 DrawItem 成员函数中简单地绘制它们,但它看起来有
我有一个 ComboBox,我设置了 DrawMode = DrawMode.OwnerDrawFixed。然后我处理 OnDrawItem 事件,一切正常。但是,它看起来与标准 ComboBox 非
我有一个 ListView我希望调整项目的绘制(例如在 ListView 项目中突出显示某些字符串),但是我不想从根本上改变项目的显示方式。 我已经设置了 OwnerDraw到 true 并且可以了解
我想在 TVirtualStringTree 标题列上绘图,但我遇到了问题。我需要树列来使用它的“默认绘制”并在其上添加我自己的图形。 如果我将 hoOwnerDraw 与 Header.Option
我正在尝试使用 OnCustomDrawItem 在报告模式下绘制一个包含 4 列的 ListView 控件。 当我尝试更改 Canvas.font.color 时,这就是我所做的,没有任何问题。 如
使用标准按钮,如果我有 OK 和 Cancel,默认为 OK,我按下右箭头,Cancel 被选中,按下键盘上的 enter 键,Cancel 按钮函数被调用。 ownerdraw 按钮不会发生这种情况
我正在尝试实现所有者绘制的 ListView,因为基本控件占用了制表符,我需要用它来对齐列中的值。 使用 MSDN 中的示例作为基地,我能够接近。我仍然遇到的唯一问题是,当文本不适合列时使用的省略号句
我有一个带有 LargeIcon View 模式的所有者绘图 ListView,我想更改 ListViewItem 的边界属性。 This链接对我没有帮助,因为属性 SystemInformation
我用 DrawMode = OwnerDrawVariable 创建了一个自定义组合框。一切都很好,除了它在 DropDownList 模式下不再使用视觉样式,即它看起来像旧的组合框。如何使用视觉样式
这个问题可能被认为是 Flickering in listview with ownerdraw and virtualmode 的后续问题. 我在虚拟模式 中有一个ListView 控件,我尝试执行
我正在尝试为 slider 拇指制作一个带有自定义图形的轨迹栏。我从以下代码开始: namespace testapp { partial class MyTrackBar : System.
我为 TPopUpMenu 分配了一些图标,但看起来它已更改为ownerdraw(它设置为 false)...我也使用 XP Manifest,但它看起来仍然很旧(Win2000 风格)...是否可以
我正在为一个软件创建一个插件,该插件可以为我创建的表单设置皮肤。但是,按钮不是基于它们的皮肤,而是显示标准的灰色按钮。在软件论坛上询问指出 .NET 表单控件是所有者绘制的,因此我的按钮不会以正确的样
我遇到了 tabcontrol 的问题。当我将 DrawMode 更改为 ownderdrawfixed 时,tabcontrol 的 borderstyle 从“fixedsingle”更改为“3d
很难理解 ownerdraw TreeView ,这里是完整的故事: 一个 VS2013 WinForms 应用程序(在 Windows 8.1 上运行,如果重要的话启用了 TrueType ....
我正在绘制自定义 ListView,并将 OwnerDraw 属性设置为“true”。 listview 也有 AllowColumnReorder 'true' 属性。 private void l
我有一个静态控件,它在创建时具有 SS_OWNERDRAW 和 SS_NOTIFY 标志。它的父窗口有 WS_EX_COMPOSITED 标志。 在Windows XP下,绘制不正确,如下图(右上角的
我在我的 WinForms 应用程序中使用 OwnerDrawFixed 作为自定义 ListBox 控件的 DrawMode。 我想在用户将鼠标悬停在列表框项上时重新绘制 ListBoxItem 的
我是一名优秀的程序员,十分优秀!