DrawItem

MFC 控件重绘(2) NM_CUSTOMDRAW, WM_DRAWITEM, 虚函数DrawItem 控件重绘有三种方法: 1 设定界面属性 2 利用Windows的消息机制,通过Windows消息映射(Message Mapping)和反映射(Message Reflecting),在合适的时机修改控件的状态和行为。此方式涉及NM_CUSTOMDRAW和WM_DRAWITEM 3 利用虚函数机制,重载虚函数。即DrawItem虚函数。对于NM_CUSTOMDRAW,某些支持此消息的控件会发送 阅读详情

void   CListCtrlEx::DrawItem(LPDRAWITEMSTRUCT   lpDrawItemStruct)
{
LPDRAWITEMSTRUCT   lpDIS   =   lpDrawItemStruct;
CDC* pDC = CDC::FromHandle(lpDIS->hDC);

LVITEM lvi = {0};
lvi.mask = LVIF_STATE;//|LVIF_IMAGE;
lvi.stateMask = LVIS_FOCUSED | LVIS_SELECTED ;
lvi.iItem = lpDIS->itemID;
BOOL bGet = GetItem(&lvi);

BOOL bHighlight =((lvi.state & LVIS_DROPHILITED)||((lvi.state & LVIS_SELECTED) &&
((GetFocus() == this)|| (GetStyle() & LVS_SHOWSELALWAYS))));

// 画文本背景
CRect rcBack = lpDIS->rcItem;
pDC->SetBkMode(TRANSPARENT);
if( bHighlight )
{
pDC->SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
pDC->SetBkColor(::GetSysColor(COLOR_HIGHLIGHT));

pDC->FillRect(rcBack, &CBrush(::GetSysColor(COLOR_HIGHLIGHT)));
}
else
{
if (lpDIS->itemID%2 ==0)
{
pDC->SetTextColor(0x0C0F80);
pDC->FillRect(rcBack, &CBrush(0xEEF1E3));
}
else
{
pDC->SetTextColor(RGB(0,128,255));
pDC->FillRect(rcBack, &CBrush(0xE3e3e3));
}
}

//设置字体颜色
CString str;

//得到焦点大小
CRect rcFocus = lpDIS->rcItem;
rcFocus.DeflateRect(1,1,1,1);

if (lpDIS->itemAction & ODA_DRAWENTIRE)
{
//写文本
CString szText;
for (int i = 0; i < /*GetColumns()*/10; i++)
{ //循环得到文本
CRect rcItem;
if ( !GetSubItemRect(lpDIS->itemID, i, LVIR_LABEL, rcItem ))
continue;
szText = GetItemText( lpDIS->itemID, i );

rcItem.left += 5; rcItem.right -= 1;
pDC->DrawText(szText/*szText*/, lstrlen(szText), &rcItem, DT_CENTER|DT_VCENTER|DT_NOPREFIX|DT_SINGLELINE);
}
}
}

 

DRAWITEMSTRUCT 结构的定义如下:

  typedef struct tagDRAWITEMSTRUCT {

  UINT CtlType;

  UINT CtlID;

  UINT itemID;

  UINT itemAction;

  UINT itemState;

  HWND hwndItem;

  HDC hDC;

  RECT rcItem;

  ULONG_PTR itemData;

  } DRAWITEMSTRUCT, NEAR *PDRAWITEMSTRUCT, FAR *LPDRAWITEMSTRUCT ; 结构成员:

  成员:

  CtlType

   指定了控件的类型,其取值如下表所示。

  ODT_BUTTON :按钮控件

  ODT_COMBOBOX :组合框控件

  ODT_LISTBOX :列表框控件

  ODT_LISTVIEW :列表视图控件

  ODT_MENU :菜单项

  ODT_STATIC :静态文本控件

  ODT_TAB :Tab 控件

  CtlID

   指定了自绘控件的ID 值,而对于菜单项则不需要使用该成员

  itemID

  表示菜单项ID ,也可以表示列表框或者组合框中某项的索引值。对于一个空的列表框或组合框,该 成员的值为–1 。这时应用程序只绘制焦点矩形(该矩形的坐标由rcItem 成员给出)虽然此时控件中没有需要显示的项,但是绘制焦点矩形还是很有必要的,因为这样做能够提示用户该控件是否具有输入焦点。当然也可以设置 itemAction 成员为合适值,使得无需绘制焦点。

  itemAction

  指定绘制行为,其取值可以为下表中所示值的一个或者多个的联合。

  ODA_DRAWENTIRE :当整个控件都需要被绘制时,设置该值

  ODA_FOCUS :如果控件需要在获得或失去焦点时被绘制,则设置该值。此时应该检查itemState 成员,以确定控件是否具有输入焦点。

  ODA_SELECT

  如果控件需要在选中状态改变时被绘制,则设置该值。此时应该检查itemState 成员,以确定控件是否处于选中状态。

  itemState

  指定了当前绘制操作完成后,所绘项的可见状态。例如,如果菜单项应该被灰色显示,则可以指定ODS_GRAYED 状态标志。其取值可以为下表中所示值的一个或者多个的联合。

  ODS_CHECKED :如果菜单项将被选中,则可设置该值。该值只对菜单项有用。

  ODS_COMBOBOXEDIT :在自绘组合框控件中只绘制选择区域。

  ODS_DEFAULT :默认值。

  ODS_DISABLED :如果控件将被禁止,则设置该值。

  ODS_FOCUS :如果控件需要输入焦点,则设置该值。

  ODS_GRAYED :如果控件需要被灰色显示,则设置该值。该值只在绘制菜单时使用。

  ODS_HOTLIGHT :Windows 98/Me, Windows 2000/XP: 如果鼠标指针位于控件之上,则设置该值,这时控件会显示高亮颜色。

  ODS_INACTIVE :Windows 98/Me, Windows 2000/XP: 表示没有激活的菜单项。

  ODS_NOACCEL :Windows 2000/XP: 控件是否有快速键盘。

  ODS_NOFOCUSRECT :Windows 2000/XP: 不绘制捕获焦点的效果。

  ODS_SELECTED :选中的菜单项。

  hwndItem

  指定了组合框、列表框和按钮等自绘控件的窗口句柄;如果自绘的对象时菜单项,则表示包含该菜单项的菜单句柄。

  hDC

  指定了绘制操作所使用的设备环境。

  rcItem

  指定了将被绘制的矩形区域。这个矩形区域就是上面hDC 的作用范围。系统会自动裁剪组合框、列 表框或按钮等控件的自绘制区域以外的部分。也就是说rcItem 中的坐标点(0 ,0 )指的就是控件的左上角。但是系统不裁剪菜单项,所以在绘制菜单项的时 候,必须先通过一定的换算得到该菜单项的位置,以保证绘制操作在我们希望的区域中进行。

  itemData

  对于菜单项,该成员的取值可以是由

  CMenu::AppendMenu 、

  CMenu::InsertMenu 或者

  CMenu::ModifyMenu

  等函数传递给菜单的值。

  对于列表框或这组合框,该成员的值可以为由

  ComboBox::AddString 、

  CComboBox::InsertString 、

  CListBox::AddString 或者

  CListBox::InsertString

  等传递给控件的值。

如果ctlType 的取值是ODT_BUTTON 或者ODT_STATIC, itemData 的取值为0 。

 

 

 

 

 

 

 

FromHandle

  MFC 实际上是对内核对象HANDLE( 如CDC 的m_hDC ,CWnd 的m_hWnd )封装了这个句柄有关的所有操作,一个类生成一个新对象的时候这个句柄是 无效的,要获得这个句柄,可以有两个方法,一个是Create 来创建,另一个就是用Attach 来与一个已有的句柄建立关联,实际上也就是给类的句柄成员 变量赋值。 而有个时候这个句柄不是由我们创建, 但是我们要对它的封装类进行操作,(mfc 框架) 必需创建对应的封装类包装它

  MFC 中对各种包含内核对象的封装类都有FromHandle(HANDLE h) 方法

  FromHandle(HANDLE h) 先查找由用户定义的内核对象对象的封装类, 如果找到直接返回, 没有找到构造一个临时对象返回.

  例如:

  void CListViewEx::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)

  {

  CListCtrl& ListCtrl=GetListCtrl();

  // 构造了一个句柄是lpDrawItemStruct->hDC 的包装类

  CDC* pDC = (CDC *)CDC::FromHandle(lpDrawItemStruct->hDC);

  }

 

 

列表视图控件(List Control )
列表视图控件是一种非常常用的控件,在需要以报表形式显示数据时,列表控件通常是最好的选择,许多专用的数据报表控件,也是在它的基础上派生而来。与树视图类似,列表控件可以由多个子项目组成,并且支持大图标、小图标、列表和报表4 种方式显示信息,如图1 所示。
图1 列表视图的4 种显示方式
列 表视图包含一个项目列表,而其中每个项目由图标、项目名称和多个子项组成,每一个子项所包含的项目的数目必须相同,属性相同的每个子项显示在同一个列中。 列表视图控件有两个重要的数据结构LVCOLUMN 和LVITEM 。LVCOLUMN 用于定义报表方式下的“ 列” 的结构;LVITEM 用于定义“ 项” 的结 构。这两个结构的定义及说明如下:

typedef struct _LVCOLUMN {
UINT mask;            //
说明此结构中哪些成员是有效的
int fmt;           //
列的对齐方式
int cx;            //
列的初始宽度
LPTSTR pszText;          //
列的标题
int cchTextMax;   //pszText
所指向的缓冲区的大小
int iSubItem;      //
与列关联的子项的索引值,从0 开始
int iImage;           //
与列关联的图像列表中指定图像的索引值
int iOrder;           //
第几列,0 代表最左一列
} LVCOLUMN, FAR *LPLVCOLUMN;
typedef struct _LVITEM {
UINT   mask;        //
说明LVITEM 结构中哪些成员有效
int    iItem;       //
项目的索引值( 可以视为行号) 从0 开始
int    iSubItem;    //
子项的索引值( 可以视为列号) 从0 开始
UINT   state;       //
子项的状态
UINT   stateMask;   //
状态有效的屏蔽位
LPTSTR pszText;   //
主项或子项的名称
int    cchTextMax; //pszText
所指向的缓冲区大小
int    iImage;       //
关联图像列表中指定图像的索引值
LPARAM lParam;    //
程序定义的32 位参数
int iIndent;          //
表示图像位置缩进的单位
} LVITEM, FAR *LPLVITEM;

列表项常用的属性如下:View 指定程序运行后列表视图控件最初显示的方式,可以设置为Icon (大图标)、SmallIcon (小图标)、List (列 表)或Report (报表);Single selection 表示每次只能选中一个项;Auto arrange 使得项目在Icon 和Small Icon 显示方式下能够自动排序;Edit Labels 表示可以编辑项目的卷标;No column header 表示取消控件所有列的标题。

从PWM到精准电流:双光耦与LM317构建的4-20mA隔离输出方案 本文详细介绍了基于双光耦与LM317的4-20mA隔离输出方案,适用于工业自动化中的PWM信号转换。该方案通过电气隔离和精准电流调节,显著提升抗干扰能力和信号传输精度,同时降低成本60%。文章还分享了电路设计、参数计算及调试经验,为工程师提供实用参考。 阅读详情

相关推荐

如何选择StandardScaler、MinMaxScaler和RobustScaler做标准化的对比解释和示例代码

选择合适的标准化方法取决于数据的特点和需求。如果数据分布接近正态分布且无异常值,可以使用。如果需要将数据映射到特定范围内并保持相对关系,可以使用。如果数据中存在异常值或离群点,可以使用进行鲁棒标准化。在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,StandardScaler表现更好(避免不同量纲对方差、协方差计算的影响);在不涉及距离度量、协方差、数据不符合正态分布、异常值较少的时候,可使用MinMaxScaler。

qq_36001281的博客 4939

控件自绘-DrawItem添加

DrawItem是一个虚函数,在类向导中在虚函数下面添加,如图: 另外在消息里面也有一个DRAWITEM,如下图: 按钮设置重绘代码 ModifyStyle(0, BS_OWNERDRAW); 如果指定了重绘,但是没有实现重绘代码,程序运行就会崩溃。 ...

youyicc 2416

深入解析DisplayPort(DP)接口:从主链路到辅助通道的全方位技术剖析

本文深入解析DisplayPort(DP)接口的核心技术架构,重点剖析了其三大功能模块:承载视频/音频数据洪流的Main-Link主链路、负责链路训练与设备控制的AUX CH辅助通道,以及实现智能交互的HPD热插拔检测。文章详细阐述了主链路的可伸缩Lane配置、嵌入式时钟与数据成帧机制,以及辅助通道在设备发现、动态优化信号质量(链路训练)中的关键作用,揭示了DP接口实现高效率与灵活性的设计哲学。

weixin_29267307的博客 485

自绘按钮的实现

自绘按钮的实现如果你希望能够在自己的程序中表现出新意,那么你一定不会仅仅满足于MFC提供那些标准控件。这时,我们就必须自己另外多做些工作了。就改变控件外观这一点来说,主要是利用控件的自绘功能(Owner Draw)实现的。本篇将和各位一起定义一个XP风格的CXPButton按钮类,目的不在于介绍CXPButton类的使用技巧,而在于向各位阐述实现自绘按钮的方法。当然如果你觉得CXPButton有用

rollor_phoe的专栏 923

LTE信令流程及业务流程

eNB返回E-RAB建立响应消息,E-RAB建立列表信息中包含成功建立的承载信息,E-RAB建立失败列表消息中包含没有成功建立的承载消息。3)当下行数据达到时,网络侧先对UE进行寻呼,随后UE发起随机接入过程,并发起service request过程。用户面:S-GW向eNB发送承载建立请求,包含(IMSI, QoS, TFT, TEID, LBI等)控制面:MME向eNB发送E-RAB建立请求,包含E-RAB ID,QoS,S-GW TEID。3)在S1接口上建立S1承载,在Uu接口上建立数据无线承载。

qq_44390640的博客 4581

VASP计算层错能(SFE)全攻略2

本文介绍了使用VASP计算纯镍(Ni)层错能(SFE)的具体步骤。首先构建Ni的FCC单胞并扩展为超胞,通过修改原子位置引入堆垛层错;随后分别计算完美晶体和含层错结构的能量;最后通过能量差与层错面积之比求得SFE值。计算需注意k点网格、截断能和超胞尺寸的收敛性测试,并推荐使用PAW赝势和ASE等工具辅助结构构建。

weixin_50519490的博客 1986

DrawItem()内部一般实现内容步骤

【代码】DrawItem()内部一般实现内容步骤。

zxf347085420的博客 262

信捷XD/XL系列PLC与C#通信实战:Modbus-RTU协议详解(附完整代码)

本文详细介绍了信捷XD/XL系列PLC与C#通过Modbus-RTU协议实现高效通信的实战指南。从硬件连接到软件配置,再到核心通信功能的实现与优化,提供了完整的代码示例和工业级应用建议,帮助开发者快速构建稳定的自动化通信系统。

weixin_28292761的博客 511

C# Winform编程ListBox之DrawItem事件

新建一个winform项目,拖一个ListBox控件listBox1 publicForm1() { InitializeComponent(); listBox1.DrawMode=DrawMode.OwnerDrawFixed; } 首先需要设置DrawMode为DrawMode.O...

dxm809的博客 4153

NXP S32K1 SPI驱动实战:从配置到DMA传输的完整流程解析

本文深入解析了NXP S32K1系列MCU的SPI驱动开发全流程。基于S32 Design Studio环境,详细阐述了从引脚配置、LPSPI模块初始化,到实现阻塞、中断及DMA三种传输模式的实战代码与配置要点。文章重点剖析了DMA传输的配置细节与性能优化,旨在帮助开发者构建高效、稳定的嵌入式SPI通信,并提供了SPI Flash驱动的综合案例。

blue42的博客 712

Zynq7000混合启动方案:QSPI Flash引导与eMMC ext4文件系统部署实战

本文详细介绍了Zynq7000平台的混合启动方案,结合QSPI Flash引导与eMMC ext4文件系统部署,解决嵌入式Linux系统启动可靠性与大容量存储需求。通过硬件连接配置、分区规划、Petalinux工程配置及实战部署步骤,帮助开发者高效实现系统优化,提升启动速度和文件系统性能。

weixin_29190169的博客 446

WM_DRAWITEM与DrawItem()的讨论

     我在学习中经常遇到要重写DrawItem()的情况,但又有一个WM_DRAWITEM消息,它们是什么样的关系呢。如果我们要重写一个CButton取名为CMyButton,我们可以重写CMyButton的DrawItem()函数来实现我们的需求,但CMyButton::DrawItem()是在什么时候调用呢?它是在它的宿主类的OnDrawItem()中被调用,OnDrawIte

FlowShell的专栏 2万+

YOLOv11损失函数进阶:融合SmoothL1与FocalLoss,让检测精度再涨10%的实战教程

在YOLOv11的这里的beta参数控制“L1与L2的过渡阈值”,默认设为1.0即可兼容多数场景。同样在# 计算动态alpha(基于类别样本数,需提前统计self.class_counts)# 交叉熵基础# FocalLoss权重else:使用前需统计数据集的(每个类别的样本数),并传入的alpha参数。损失函数是YOLOv11精度的“灵魂”——SmoothL1让边界框回归“稳、准、狠”,改进FocalLoss让类别分类“雨露均沾”。从代码改造到实战落地,本教程已为你搭建了一条精度跃升的路径。

m0_64661770的博客 212

OnDrawItem DrawItem

我在学习中经常遇到要重写DrawItem()的情况,但又有一个WM_DRAWITEM消息,它们是什么样的关系呢?   如果我们要重写一个CButton取名为CMyButton,我们可以重写CMyButton的DrawItem()函数来实现我们的需求,但CMyButton::Dr

solidsnake002的专栏 3240

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

重写DrawItem遇到的问题

我们在学习中经常遇到要重写DrawItem()的情况,但又有一个WM_DRAWITEM消息,它们是什么样的关系呢。 如果我们要重写一个CButton取名为CMyButton,我们可以重写CMyButton的DrawItem()函数来实现我们的 需求,但CMyButton::DrawItem()是在什么时候调用呢?它是在它的宿主类的OnDrawItem()中被调用, OnDrawI

Wolf的专栏 1489

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

OnCtrlColor,OnDrawItem,DrawItem,OnPaint之间关系

我在学习中经常遇到要重写DrawItem()的情况,但又有一个WM_DRAWITEM消息,它们是什么样的关系呢。 如果我们要重写一个CButton取名为CMyButton,我们可以重写CMyButton的DrawItem()函数来实现我们的需求, 但CMyButton::DrawItem()是在什么时候调用呢?它是在它的宿主类的OnDrawItem()中被调用, OnDrawItem(int

brk1985的专栏 2400

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

WM_DRAWITEM,DrawItem的一些总结

1、     当在MFC中要对某个控件自绘时,就需要重写DrawItem或者OnDrawItem函数,要实现重绘:     首先要允许重绘:    1)可以在控件属性中设置(网上很多,自己搜吧)      2)在控件类中实现,     比如我实现了class CMyButton:public  CButton自己的按钮类,然后在CMyButton中重写PreSubclassWindow函

woshiyuanlei的专栏 3363

DrawItem()什么时候会被触发?

DrawItem()的触发依赖于 ​​自绘模式启用​​ 和 ​​控件重绘需求​​,其核心作用是为开发者提供自定义控件外观的能力。通过合理控制自绘逻辑和消息响应,可实现高度定制化的界面效果。

felicity_one的博客 1109

WM_DRAWITEM消息

WM_DRAWITEM消息当具有自绘风格的按钮、组合框、列表框或者菜单的可见部分发生改变时,就会发送WM_DRAWITEM消息给自绘控件所在的窗体。窗口通过WindowProc函数接受WM_DRAWITEM消息WindowProc函数定义如下:LRESULT CALLBACK WindowProc(HWND hwnd, //指向窗口的句柄UINT uMsg, WM_DRAW

joy16888的专栏 1300

[转]WM_DRAWITEM与DrawItem()的讨论(自绘)

http://blog.youkuaiyun.com/FlowShell/archive/2009/10/10/4648800.aspx     我在学习中经常遇到要重写DrawItem()的情况,但又有一个WM_DRAWITEM消息,它们是什么样的关系呢。 如果我们要重写一个CButton取名为CMyButton,我们可以重写CMyButton的DrawItem()函数来实现我们的 需求,但CMyBu

xiexievv的专栏 3836

DrawItem()什么时候会被触发?以CButton为例子

DrawItem()的触发依赖于 ​​自绘模式启用​​ 和 ​​按钮状态变化​​。以CButton设置样式 → 2. 系统发送消息 → 3. 父窗口调用DrawItem()→ 4. 自定义绘制逻辑执行。通过此机制,开发者可完全控制按钮的外观,实现如渐变背景、图标嵌入等高级效果。

felicity_one的博客 1077
上一篇: check1
下一篇: CListCtrl, 重载DrawItem函数
uda1985
博客等级 码龄17年 39粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值