扩展你的WIndows标准控件

MFC控件全解析:从标准控件到高级应用与实战技巧 在Windows桌面开发领域,GUI编程是构建用户界面的核心。其底层原理基于消息循环、窗口句柄和资源管理机制,这些概念构成了现代UI框架的基础。理解控件的创建、消息映射与数据交换机制,对于开发稳定高效的桌面应用具有重要技术价值,尤其在维护遗留系统、工业软件等场景中至关重要。本文聚焦MFC控件体系,涵盖标准控件如CButton、CEdit,以及高级公共控件如CListCtrl、CTreeCtrl的使用,并深入探讨了子类化、多线程安全等实战技巧,帮助开发者应对实际开发中的常见问题与性能挑战。 阅读详情

      扩展你的WIndows标准控件
 作者:ShellEx
 www.shellex.cn && blog.youkuaiyun.com/shellex 版权所有。

标准控件嘛,意味着他们默认的功能和表现力都是有限的.比如说,当鼠标点击Edit控件时,虽然
作为子窗体的Edit控件(Edit也是窗体)会接受到WM_LBUTTONUP和WM_LBUTTONDOWN消息,
但是它并不会向父窗体发送相关的通知。也就是说,我们在处理WM_COMMAND消息时,不会
在Edit的通知中获知Edit是否被点击了。
下列是标准Edit所支持的通知,它们将被放在wParam的高字位中,其中并没有我想要的
WM_LBUTTONUP或者类似的消息。

EN_CHANGE :The user has modified text in an edit control. Windows updates the display before sending this message (unlike EN_UPDATE).
EN_ERRSPACE :The edit control cannot allocate enough memory to meet a specific request.
EN_HSCROLL : The user has clicked the edit control's horizontal scroll bar. Windows sends this message before updating the screen.
EN_KILLFOCUS :The user has selected another control.
EN_MAXTEXT  :  While inserting text, the user has exceeded the specified number of characters for the edit control. Insertion has been truncated. This message is also sent either when an edit control does not have the ES_AUTOHSCROLL : style and the number of characters to be inserted exceeds the width of the edit control or when an edit control does not have the ES_AUTOVSCROLL style and the total number of lines to be inserted exceeds the height of the edit control.
EN_SETFOCUS  :  The user has selected this edit control.
EN_UPDATE  :  The user has altered the text in the edit control and Windows is about to display the new text. Windows sends this message after formatting the text, but before displaying it, so that the application can resize the edit control window.
EN_VSCROLL  :  The user has clicked the edit control's vertical scroll bar. Windows sends this message before updating the screen.

想实现能对Edit单击鼠标事件发出响应,有个很简单的方法,那就是只需子类化Edit,自
定义Edit的消息处理过程就可以了。有两个相关函数:
LONG GetWindowLong(

    HWND hWnd, // handle of window
    int nIndex  // offset of value to retrieve
   );
  
LONG SetWindowLong(

    HWND hWnd, // handle of window
    int nIndex, // offset of value to set
    LONG dwNewLong  // new value
   );
前者可以得到窗体的若干信息,后者可以设置窗体的若干属性。包括处理消息的回调函数。
关于函数的参数,请查阅MSDN。下面是具体实现。
我先创建一个基于对话框的Win32 GUI工程,在相应WM_INITDIALOG消息的函数
Main_OnInitDialog中写入如下代码:

////////////////////////////////////////////////////////////////////////////////


//先得到原来的Edit的消息处理回调函数,最后一个参数使用GWL_WNDPROC
oldEditProcAddr = GetWindowLong(GetDlgItem(hwnd,IDC_EDIT_PROCESS),GWL_WNDPROC);
//子类化Edit,让他能发送EN_LBUTTONUP通知。
SetWindowLong(GetDlgItem(hwnd,IDC_EDIT_PROCESS),GWL_WNDPROC ,(long) _NewEditProc);

////////////////////////////////////////////////////////////////////////////////

EN_LBUTTONUP是我自定义的一个常量,是WM_USER + 101,IDC_EDIT_PROCESS是一个Edit
控件的ID。hwnd是父窗体的句柄。_NewEditProc是我自己写的回调函数,以后发给Edit的
消息会被送到_NewEditProc处理。
下面是_NewEditProc函数的代码:

////////////////////////////////////////////////////////////////////////////////
LRESULT CALLBACK _NewEditProc(HWND hwnd, UINT uMsg, WPARAM wParam,LPARAM lParam ) {
 //如果鼠标左键在Edit上放开
 if ( WM_LBUTTONUP == uMsg ) {
  //将本Edit的ID放到wparam的低字位,自定义的响应通知放在高字位
  WPARAM wp = MAKEWPARAM(IDC_EDIT_PROCESS, EN_LBUTTONUP);
  //lparam放着Edit的句柄
  LPARAM lp = (LPARAM)hwnd;
  把这个消息组合一下,作为WM_COMMAND发给父窗体
  SendMessage(GetParent(hwnd), WM_COMMAND, wp, lp);
 }
 //其他的消息由默认的处理函数处理
 return CallWindowProc((WNDPROC)oldEditProcAddr, hwnd, uMsg, wParam, lParam);
}
////////////////////////////////////////////////////////////////////////////////

现在,我在主窗体的消息循环里就可以轻易地得到鼠标单击的通知了:

////////////////////////////////////////////////////////////////////////////////
void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) {
    switch(id) {
  case IDC_EDIT_PROCESS:
   if (codeNotify == EN_LBUTTONUP)
    Main_OnEditProcess_Click(hwnd,id,hwndCtl,codeNotify);
  break;
        default:break;
    }
}
////////////////////////////////////////////////////////////////////////////////

在函数Main_OnEditProcess_Click中可以轻松实现你希望实现的功能了。: )
    www.shellex.cn && blog.youkuaiyun.com/shellex 版权所有。

 

 

 

C# WinForms自定义下拉菜单控件终极指南:从基础到炫酷动画实现 / 重置动画状态。 阅读详情

相关推荐

使用Windows标准控件

Windows各个标准控件的使用,具体讲解了按钮、文本框、列表框、组合框、滚动条等多种控件的各种用法,步骤清晰具体,且有源码。

windows标准控件的介绍与使用

一、 Windows标准控件概述 (一)Windows标准控件 Windows系统提供的标准控件主要包括静态控件、按钮控件、编辑框控件、列表框控件、组合框控件等,如表所示。 Windows标准控件的类型 类别 MFC类控件类型 静态控件CStatic Static Text, Group Box 按钮控件CBut

holybin的专栏 1万+

windows标准控件

很好的资料建树的很详细,分享给大家学习

windows编程 标准控件的使用(按钮,文本框)

标准控件我们使用 WM_COMMAND来处理消息,其中wParam的高字节存储控制消息的通知代码,低字节存储控件的表示符,lParam存储控件的句柄。打开记事本,保证记事本的名字正确,运行代码,你就会发现你的0x103标识的按钮跑到记事本窗口上去了。任务:从一个文本框里输入信息,然后经过一个按钮点击,把这个消息发送到另一个文本框,相当于复制内容.我们要实现点击按钮,然后让按钮随机在窗口内移动,该如何操作?处理WM_COMMAND消息,并且获取每个部件的标识符。在我们创建窗口并且在CREATE的时候创建。

ylh的博客 1221

概率数据关联(PDA):多目标跟踪的基石算法

1. 为什么需要概率数据关联? 2. 核心思想与假设条件 3. 算法核心:概率分配与状态更新 4. 典型应用场景与优势 5. 挑战与改进方向 6. 下期预告

qq_44965657的博客 1462

关于【中孚计算机终端保密检查系统】的卸载

卸载中孚计算机终端保密检查系统

码农之路,向死而生 4万+

Day03 Window控件的使用

使用**LOWORD获取低位字节;**利用低位字节存储的控制标识符和对应的窗口表示比较即可。:当用户从菜单中选择命令项、控件将通知消息发送到其父窗口或翻译快捷键击时发送。在主窗口添加控件:注意要在窗口的创建时就创建,即WM_CREATE处理此消息。的包括:WS_OVERLAPED,WS_POPPUP, WS_CHILD。子控件通知父窗口一些事件,例如子控件被点击,需要通过以下两类消息。的 WS_BORDER, WS_CAPITON等。Windows窗口从其特点是主要分为两大类。标准控件的消息形式处理。

ylh的博客 636

【Java】利用反射执行Spring容器Bean指定的方法,支持多种参数自动调用

目录 使用情景 目的 实现方式 前提: 思路 核心类 测试方法 使用情景 将定时任务录入数据库(这样做的好处是定时任务可视化,也可以动态修改各个任务的执行时间),通过反射执行对应的方法; 配合Netty实现简单的HTTP请求处理框架 其他需要使用反射执行Spring方法的业务亦可 目的 很多文章都提到了反射,但是对于方法参数处理这一块都是明确了类型,不支持按照实际参数动态转换,而本篇文章提供了一个思路怎么做到方法参数的动态调用。 大家也可以...

ITjianshuzhai的博客 2333

Windows系统内置的WIN32控件可分为标准控件和通用控件两大类

标准控件是Windows系统提供的基础控件集,在程序编译时会直接嵌入到可执行文件中1。通用控件通过动态链接库提供,使用前需要初始化并引入相关库文件1。这些控件为Windows应用程序提供了丰富的界面元素和交互功能。使用通用控件需要在代码中引入头文件和库文件,并通过。

364

Versal ACAP NoC实战:像理解计算机网络一样配置AXI NoC,打通PS与PL数据通路

本文深入探讨了Versal ACAP NoC的配置与优化,通过计算机网络类比解析NoC架构,详细介绍了在VD100开发板上配置AXI NoC实现PS与PL数据交互的实战步骤。文章涵盖NoC组件功能、Vivado配置技巧、性能优化方法及常见问题解决方案,帮助开发者高效打通Versal芯片的数据通路。

weixin_42665255的博客 291

双目立体成像(一)双目图片生成点云

利用左右目图片生成点云

qq_62964142的博客 4549

精通Win32 API编程-Windows图形界面编程

Windows的API(Application Programming Interface,应用程序编程接口),是Windows 操作系统提供给应用程序的大量函数,学习本课程,不仅可以掌握Windows界面编程,开发华丽的Windows桌面运用程序,也可以为MFC框架的学习奠定扎实的基础,同时是否熟练的掌握Windows API开发,也是企业考量优秀程序员一个非常重要的指标!

(UE5 5.2)HISM Mobile DrawInstance在渲染层的实现浅分析

在 (UE4 4.27) UHierarchicalInstancedStaticMesh(HISM)原理分析 这篇博客大致介绍HISM组件从游戏线程到渲染线程的重建KD-Tree和剔除并提交DrawCall逻辑,但是没有分析渲染层的大致数据结构和实现. 可以看出FHierarchicalStaticMeshSceneProxy 实际存储Instance数组数据来自于FInstancedStaticMeshSceneProxy FHierarchicalStaticMeshSceneProxy只是以FClu

qq_29523119的博客 2724

如何开发一个Windows控件

本文是基于Windows平台下的dot Net环境上的Form程序,思想可能也适用于其他场合。算是对过去开发经验的总结,保不齐有些内容是胡扯,勿怪。一.背景介绍  很多时候做winForm程序时,标准控件不能完全满足要求,第三方可能也不太合适,比如收费,这个时候往往需要自己开发一个控件。牛人可能会有所不同, 但我想大多数人的做法无外乎两种:  1.继承已

老桥的技术家园 6521

逆强化学习:从专家示范中学习策略

逆强化学习(Inverse Reinforcement Learning,简称IRL)是强化学习(Reinforcement Learning,简称RL)的一个子领域,它的目标是从专家的行为中学习策略。在传统的强化学习中,智能体通过与环境交互,根据奖励信号来学习一个策略。而在逆强化学习中,我们没有直接的奖励信号,而是通过观察专家的行为来推断出奖励函数,从而学习到一个与专家类似的策略。逆强化学习作为强化学习的一个重要子领域,在许多实际应用场景中都取得了显著的成功。

AI天才研究院 1447

ReAct 智能体 Agent:架构解析与实践拓展

ReAct 智能体 Agent 凭借其推理与行动协同的独特架构,在众多人工智能应用场景中展现出巨大的潜力。从智能办公到教育辅导,从智能家居到工业物联网,ReAct 智能体通过精准推理和高效行动,为用户提供了更加智能、便捷的服务体验。然而,在实际应用过程中,仍面临工具调用安全、模型持续学习、多智能体协作管理以及性能优化等多方面的挑战。通过合理的策略和技术创新,如强化工具审核机制、构建持续学习框架、设计高效协作协议和采用性能优化手段,我们有望逐步克服这些挑战,进一步提升 ReAct 智能体的性能和可靠性。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 1686

“易语言.飞扬”第一个第三方界面库,efgui,作者迷迷66

http://bbs.dywt.com.cn/dispbbs.asp?boardID=148&ID=146121&page=1库名: efgui所需支持库:系统,本人的winapi。控件全部转换自WINDOWS的标准控件,扩展性强,你甚至可以直接向它们发送消息,界面美观标准。适用人群:中级以上易友。附带例程:简单记事本。  

“易语言.飞扬”官方技术博客 - (Official EF blog) 2488

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

WinForm(二) WinForm进阶与复杂控件使用

WinForm(二) WinForm进阶与复杂控件使用

这里是阿安的博客 9768

深度学习工具包 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")

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

用C++和Win32的方式编写GUI [ZT]

WTL delivers the object oriented way to program for the Windows user interface, while keeping the code size small. It also provides a great foundation that developers can extend with their own classes

wqs6的专栏 4746

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

SendMessage函数的常用消息及其应用

  文本框控件通常用于输入和编辑文字。它属于标准 Windows 编辑控件的一个子类,所以它支持所有 编辑控件消息?这儿讲述的技术也适用于由其他厂商设计的 , 以Windows编辑控件类为基础的其他控件? 函数原型: Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, _ B...

weixin_30408309的博客 682

高效数据阵列分析工具FastCube.Net v2021.1的新功能

FastCube使您能够分析数据并构建汇总表(数据切片),以及轻松、即时地创建各种报表和图表。它是高效分析数据阵列的便利工具。 立即点击获取FastCube.Net 2021.1最新安装包+用户手册 我们添加了 FastReport 业务图形扩展。它是一种用于交互式可视化应用程序数据的新产品。 添加了 ListDataSet 组件,该组件允许使用 Windows 窗体数据绑定将数据加载到多维数据集。 现在可以使用标准控件中使用的 Windows 窗体复杂数据绑定将数据加载到多维数据集:DataGridVie

RoffeyYang的博客 277

wtl重载 CListViewCtrl,及其用法。

1.控件源码:ColorListCtrl.h //////////////////////////////////////////////////////////////////////////////// // 自己的ListBox // // author yuanyc // date 2012.01.12 // Copyright (c) 2012. 中软万维 /...

weixin_30819163的博客 424

MFC之使用 Windows 标准控件

使用 Windows 标准控件 为了提高常用代码的复用性,VC 使用控件将常用的诸如用户输入、操作数据等功能封装起来。控件通常放在对话框或工具栏中,分为 3 种:Windows 标准控件、ActiveX 控件和 MFC 支持的其他控件类。 一、Windows 标准控件 1、常用 Windows 控件 控件 MFC 类 说明 按钮控件 CButton 按钮控件,可以产生单击事件...

御承扬的博客 2575

[Delphi] 标准控件(Memo组件)

Edit和MaskEdit组件都只能编辑单行文本,Delphi的Memo组件提供了多行文本的编辑功能。下面解释Memo组件常用的属性。属性说明 Lines这是Memo组件最常用,也是最有用的属性,它用来显示和保存Memo组件中的内容。 Scrollbar很多组件都有这个属性。用于设定组件有否滚动条。它有四个值:

.net成长不容易 1万+

扩展 Rational Functional Tester 的对象识别技术

<br />RFT 对象概述<br /><br />RFT 对象<br />从开发的角度看,GUI 通常都是基于某一 GUI 开发库(SWT/SWING/AWT),这些库通常是按照面向对象的方式进行建模的,它将每一个 GUI 元素映射成该库中某一个类的对象。<br />从测试的角度看,所有的 GUI 元素,无论基于何种 GUI 库,都被 RFT 映射成对象,RFT 提供一个对象模型框架管理各种 GUI 元素。<br />图 1 是一个典型的基于 SWT 开发的 GUI,对于其中的一个按钮,在开发者看来,

chenjinyu的专栏 1132

Zotero 7 插件不工作?升级后标签与进度条消失的快速修复指南

刚把 Zotero 升到 7,打开一看,熟悉的期刊标签、阅读进度条甚至 EasyScholar 集成都不见了,栏目布局也退回出厂样子——这是典型的 Zotero 7 插件兼容性问题,不是你的文献库坏了,修好它只需要几分钟。 ## 🔍 60 秒自查:Zotero 7 插件症状对照表 | 你看到的症状 | 大概率原因 | 对应修复项 | | --- | --- | --- | | 期刊标签、分类

gitblog_01148的博客 657
上一篇: gcc 内嵌汇编的学习笔记 IV
下一篇: 与Ajax邂逅.
ShellEx
博客等级 码龄21年 4粉丝 43原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值