当前位置:文档之家› MFC控件之ListBox

MFC控件之ListBox

MFC控件之ListBox
MFC控件之ListBox

mfc控件之ListBox

1、增加listbox控件,去掉style中的sort项的勾,表示显示不用排序

2、插入、删除记录

m_listbox.AddString(LPCTSTR str); //增加一条记录,如果没勾选sort项的话加到列表框的最后m_listbox.DeleteString(UINT n); //删除第n条记录

m_listbox.InsertString(UINT n, LPCTSTR str); //在第n行插入记录

3、删除所有记录m_listbox.ResetContent();

4、获取列表中行数m_listbox.GetCount();

5、获取当前选中记录行数m_listbox.GetCursel();

6、设置指定行数为选定m_listbox.SetCursel(int n);

MFC中listbox控件是为了显示一系列的文本,每个文本占一行。

Listbox控件可以设置属性为:

LBS_CHILD :(默认)子窗口

LBS_Visible :(默认)可视

LBS_Multiplesel :可选择多行

LBS_Extendedsel :可以使用shift或ctrl选择多行

LBS_SORT:所有行按字母顺序进行排序

对Listbox进行操作:

Int listbox.AddString (LPCTSTR Str) :对listbox的首行添加一个str的文本行, 即此时nIndex为0;

Int listbox.DeleteString (uint nIndex) :删除listbox中第nIndex行的文本行,注意nIndex是从0起始的;int listbox.InsertString (uint xIndex, LPCTSTR Str):在listbox中第nIndex行插入一个str的文本行;

Int listbox.GetCount ( ):获取listbox的行的总数目;

Int listbox.GetCurSel ( ):得到listbox选中的文本行的行数。

Void listbox.ResetContent ( ):清除listbox中的所有数据;

Int listbox.GetCurCount ( ):获取listbox被选中的行的数目;

Int listbox.FindString ( int nstart , LPCTSTR Str ):从第nstart行开始起进行查找,查找Str的文本行;Int listbox.SelectString ( int nstart, LPCTSTR Str ) :从第nstart行开始,选择包含Str字符串的那一行;

对Listbox中某一行进行双击操作,要产生一个响应函数的步骤:

BEGIN_MESSAGE_MAP()

END_MESSAGE_MAP()

之间添加响应函数的消息映射,如函数名为C**Dlg::OnLbnDblClk,添加下面代码ON_LBN_DBLCLK(IDC_LIST1,&C**Dlg::OnLbnDblClk)

//IDC_LIST1为listbox控件的ID

然后在C**Dlg.h中添加函数OnLbnDblClk()的声明

最后在C**Dlg::OnLbnDblClk()函数中添加实现代码即可

VF 表单常用属性

VF 表单常用属性 Caption表单的标题 Name表单的名字 AutoCenter表单是否居中(值为.T.时,运行自动居中) Movable表单是否可移动(值为.F.时,运行时不可移动 Closable标题栏中关闭按钮是否失效(值为.F.时失效) ControlBox是否取消标题栏中所有按钮(值为.F.时取消) MaxButton指定表单最大化按钮是否失效(值为.F.时失效) MinButton指定表单最小化按钮是否失效(值为.F.时失效) 若上述两属性都为.F.,则取消最大与最小化按钮 WindowState设定运行时是否是最大化或最小化,值为0(普通),1(最小化),2(最大化) Visible设定表单是否可见,值为.F.时不可见Enabled Enabled设定表单是否可用,为.F. 时不可用 标签控件常用属性 Autosize标签的显示内容 FontName设置标签显示内容的字体 FontSzie设置标签显示内容的字体大小 ForeColor设置字的颜色 BackColor设定标签的背景色 Visible设定表签是否可见,值为.f.时不可见 文本框控件常用属性 Value文本框中的内容(值) Name文本框的名字 FontName设置文本框显示内容的字体 FontSzie设置文本框显示内容的字体大小 ForeColor设置字的颜色 BackColor设定文本框的背景色 Visible设定文本框是否可见,值为.f.时不可见 Enabled设定文本框是否激活可用,值为.f.时不可用 PasswordChar设定文本框是否为密码框 ReadOnly设定文本框是否只读,值为.t.时只读 ControlSource设定文本框的数据源(通过此属性设置,与表的字段发生联系) 命令按钮常用属性

表单的基本知识点

表单基本型控件的常用属性 1标签 Caption标题name控件名、fontsize字体大小、fontname文本字体 Alignment指定标题文本在控件内文本的对齐方式 Autosize 是否自动调整控件大小以容纳其内容 Backstyle 指定对象的背景是否透明 Borderstyle 指定对象的边框样式 2命令按钮组 Caption标题width指定对象的宽度height 指定高度 Default 指定按下enter时,哪一个命令按钮会响应 Enabled指定控件能否响应由用户引发的事件 Visible 指定对象是可见还是隐藏 3文本框 Readonly 是否设置为只读Value 设置文本框中的内容 Passwordchar 是否显示占位符,常用* Recordsource指表格数据源Recordsourcetype指表格数据源类型 注意.有两张表格,一张表格显示一数据表内容,另一张表格显示与该数据表内容对应的另一数据表的内容,这种题先添加数据环境,并使数据环境中的这两张表有联线(需先设置表间的永久联系);对两张表格RecordSourceType属性均设为“别名”,RecordSource属性设为数据表文件名。 5列表框 Multiselect 是否可进行多重选择Rowsource指列表框或组合框数据源 Rowsourcetype指列表框或组合框数据类型 6页框(也称为选项卡) PageCount(设置页数)ActivePage(设置活动页)Caption(设置每页的标题是Page1或Page2等各页的标题) 7组合框 属性:RowSourceType(数据源类型)、RowSource(数据源)、Style(设置下拉组合框还是下拉列表框 8选项按钮组 ButtonCount(设置选项数目)、Caption(设置选项的标题 9计时器 InterVal设置时间间隔 常用事件 Lode在表单对象建立之前引发Init在对象建立时引发 Destroy在对象释放时引发Unload 在表单对象释放时引发 引发顺序Load init destroy unload Click是单击事件Rightclick是右击事件 常用方法 Show是显示HIDE是隐藏 RELEASE是释放REFRESH是刷新 有关的命令 Create form 建立表单Modify form 打开表单设计器 退出或关闭thisform.release 或release thisform 建立CREATE CLASS 新类OF 类库AS 父类 修改modify CLASS 类名OF 类库 删除remove class 类名of 类库创建类库create classlib 类库名

C++ #pragma code_seg用法

#pragma code_seg 格式如: #pragma code_seg( [ [ { push | pop}, ] [ identifier, ] ] [ "segment-name" [, "segment-class" ] ) 该指令用来指定函数在.obj文件中存放的节,观察OBJ文件可以使用VC自带的dumpbin命令行程序,函数在.obj文件中默认的存放节为.text节,如果code_seg 没有带参数的话,则函数存放在.text节中。 push (可选参数)将一个记录放到内部编译器的堆栈中,可选参数可以为一个标识符或者节名 pop(可选参数)将一个记录从堆栈顶端弹出,该记录可以为一个标识符或者节名identifier(可选参数)当使用push指令时,为压入堆栈的记录指派的一个标识符,当该标识符被删除的时候和其相关的堆栈中的记录将被弹出堆栈 "segment-name" (可选参数)表示函数存放的节名 例如: //默认情况下,函数被存放在.text节中 void func1() {// stored in .text } //将函数存放在.my_data1节中 #pragma code_seg(".my_data1") void func2() {// stored in my_data1 } //r1为标识符,将函数放入.my_data2节中 #pragma code_seg(push, r1, ".my_data2") void func3() {// stored in my_data2 } int main() { } 例如 #pragma code_seg(“PAGE”) 作用是将此部分代码放入分页内存中运行。 #pragma code_seg() 将代码段设置为默认的代码段 #pragma code_seg("INIT") 加载到INIT内存区域中,成功加载后,可以退出内存

表单控件属性与方法总结

表单控件属性与方法总结表单控件属性 表单的文件名:.scx 表单

输出类控件 标签:第一次创建:name:label1 数据绑定时的字段名显示,默认的名称:lbl字段名 图像:image1. 通用型字段中如果存放的是图片,数据绑定指定的控件就是图像控件 线条:line1

形状:shape1 对控件对象的多重选定:shift+选择 输入类控件 文本框:text1 可以接受4种:c n d(t) l。可以作为以上4种数据类型的绑定控件:Txt字段名

方法:表示对象的行为 Setfocus:设置焦点 Thisform.控件名.方法名 事件: Gotfocus:对象获得焦点时 Lostfocus: 对象失去焦点时 Interactivechange:当键盘或鼠标改变文本框的值时发生 文本框和标签 分别用文本框控件和标签控件显示系统时间,系统日期,系统的日期时间Time()=c型 Date()=d型 Datetime()=t型 文本框用value可以接受c、n、d、l、t 标签用caption接受,只能是c 注意:在属性中设置也要加=

属性设置例子: THISFORM.TEXT1.VALUE=DATE() THISFORM.TEXT1.VALUE=DATETIME() THISFORM.TEXT1.VALUE=TIME() https://www.doczj.com/doc/ac2999717.html,BEL1.CAPTION=TIME() https://www.doczj.com/doc/ac2999717.html,BEL1.CAPTION=TTOC(DATETIME()) https://www.doczj.com/doc/ac2999717.html,BEL1.CAPTION=DTOC(DATE()) 列表框list1和组合框combo1 1.列表框的列表项全部显示,而组合框只显示一项 2.组合框分为下拉组合框和下拉列表框,前者允许选择和输入数据项,后者和列表框一样只有选取功能

C++ #pragma预处理命令

#pragma预处理命令 #pragma可以说是C++中最复杂的预处理指令了,下面是最常用的几个#pragma 指令: #pragma comment(lib,"XXX.lib") 表示链接XXX.lib这个库,和在工程设置里写上XXX.lib的效果一样。 #pragma comment(linker,"/ENTRY:main_function") 表示指定链接器选项/ENTRY:main_function #pragma once 表示这个文件只被包含一次 #pragma warning(disable:4705) 表示屏蔽警告4705 C和C++程序的每次执行都支持其所在的主机或操作系统所具有的一些独特的特点。例如,有些程序需要精确控制数据存放的内存区域或控制某个函数接收的参数。#pragma为编译器提供了一种在不同机器和操作系统上编译以保持C和C++完全兼容的方法。#pragma是由机器和相关的操作系统定义的,通常对每个编译器来说是不同的。 如果编译器遇到不认识的pragma指令,将给出警告信息,然后继续编译。Microsoft C and C++ 的编译器可识别以下指令:alloc_text,auto_inline,bss_seg,check_stack,code_seg,comment,component,conform,const_seg,data_seg,deprecated,fenv_access,float_control,fp_contract,function,hdrstop,include_alias,init_seg,inline_depth,inline_recursion,intrinsic,make_public,managed,message,omp,once,optimize,pack,pointers_to_members,pop_macro,push_macro,region, endregion,runtime_checks,section,setlocale,strict_gs_check,unmanaged,vtordisp,warning。其中conform,init_seg, pointers_to_members,vtordisp仅被C++编译器支持。 以下是常用的pragma指令的详细解释。 1.#pragma once。保证所在文件只会被包含一次,它是基于磁盘文件的,而#ifndef 则是基于宏的。

#pragma data code ICCAVR的使用

#pragma data:code 在Keil中为了节省数据存储器的空间,通过“code”关键字来定义一个数组或字符串将被存储在程序存储器中: uchar code buffer[]={0,1,2,3,4,5}; uchar code string[]="Armoric" ; 而这类代码移值到ICCAVR上时是不能编译通过的。我们可以通过"const" 限定词来实现对存储器的分配: #pragma data:code const unsigned char buffer[]={0,1,2,3,4,5}; const unsigned char string[]="Armoric"; #pragma data:data 注意: 《1》使用ICCAVR6.31时,#pragma data :code ;#pragma data:data ; 这些语法时在"data:cod"、"data:data"字符串中间不能加空格,否则编译不能通过。 《2》const 在ICCAVR是一个扩展关键词,它与ANSIC标准有冲突,移值到其它的编译器使用时也需要修改相关的地方。 在ICCAVR中对数组和字符串的五种不同空间分配: const unsigned char buffer[]={0,1,2,3,4,5}; //buffer数组被分配在程序存储区中 const unsigned char string[]="Armoric" ; //stringp字符串被分配在程序存储区中 const unsigned char *pt //指针变量pt被分配在数据存储区中,指向程序存储区中的字符类型数据 unsigned char *const pt //指针变量pt被分配在程序存储区中,指向数据存储区中的字符类型数据 const unsigned char *const pt //指针变量pt被分配在程序存储区,指向程序存储区中的字符类型数据 unsigned char *pt //指针变量pt被分配在数据存储区中,指向数据存储区中的数据 请问#pragma data:code和#pragma data:data是什么意思? 前者表示:随后的数据将存贮在程序区,即FLASH区,此区只能存贮常量,比如表格之类。

excel表单控件与ActiveX控件概念

工作表中的表单、表单控件和ActiveX 控件概念 是的,确实如此。在Microsoft Excel 中,使用少量或者无需 使用Microsoft Visual Basic for Applications (VBA) 代码即可 创建出色的表单。使用表单以及可以向其中添加的许多控件和 对象,您可以显著地增强工作表中的数据项并改善工作表的显 示方式。 ? ? 什么是表单? 无论是打印表单还是联机表单都是一种具有标准结构和格式的文档,这种文档可让用户更轻松地捕获、组织和编辑信息。 ?打印表单含有说明、格式、标签以及用于写入或键入数据的空格。您可以使用Excel 和Excel 模板创建打印表单。 ?联机表单包含与打印表单相同的功能。此外,联机表单还包含控件。控件是用于显示数据或者更便于用户输入或编辑数据、执行操作或进行选择的对象。通常,控件可使表单更便于使用。例如,列表框、选项按钮和命令按钮都是常用控件。通过运行(VBA) 代码,控件还可以运行指定的和响应事件,如鼠标点击。 您可以使用Excel 通过多种方式创建打印表单和联机表单。 Excel 表单的类型 您可以在Excel 中创建多种类型的表单:数据表单、含有表单和ActiveX 控件的工作表以及VBA 用户表单。可以单独使用每种类型的表单,也可以通过不同方式将它们结合在一起来创建适合您的解决方案。 数据表单

为在无需水平滚动的情况下在单元格区域或表格中输入或显示一整行信息提供了一种便捷方式。您可能会发现,当数据的列数超过可以在屏幕上查看的数据列数时,使用数据表单可以使数据输入变得更容易,而无需在列之间进行移动。如果以标签的形式将列标题列出的文本框这一简单表单足以满足您的需求,而且您不需要使用复杂的或自定义的表单功能(例如列表框或调节钮),则可以使用数据表单。 Excel 可以为您的或自动生成内 置数据表单。数据表单会在一个对 话框中将所有列标题都显示为标 签。每个标签旁边都有一个空白文 本框,您可以在其中输入每一列的 数据,最多可以输入32 列数据。 在数据表单中,您可以输入新行, 通过导航查找行,或者(基于单元 格内容)更新行及删除行。如果某 个单元格包含,则公式结果会显示 在数据表单中,但您不能使用数据 表单更改该公式。 含有表单和ActiveX 控件的工作表 工作表是一种类型的表单,可让您在网格中输入数据和查看数据,Excel 工作表中已经内置了多种类似控件的功能,如注释和数据验证。单元格类似于文本框,因为您可以在单元格中输入内容以及通过多种方式设置单元格的格式。单元格通常用作标签,通过调整单元格高度和宽度以及合并单元格,您可以将工作表用作简单的数据输入表单。其他类似控件的功能(如单元格注释、超链接、背景图像、数据验证、条件格式、嵌入图表和自动筛选)可使工作表充当高级表单。 为增加灵活性,您可以向工作表的“”添加控件和其他绘图对象,并将它们与工作表单元格相结合和配合。例如,您可以使用列表框控件方便用户从项目列表中选择项目。还可以使用调节钮控件方便用户输入数字。 因为控件和对象存储在绘图画布中,所以您可以显示或查看不受行和列边界限制的关联文本旁边的控件和对象,而无需更改工作表中数据网格或表的布局。在大多数情况下,还可以将其中许多控件链接到工作表中的单元格,而无需使用VBA 代码即可使它们正常工作。您可以设置相关属性来确定控件是自由浮动还是与单元格一起移动和改变大小。例如,在对区域进行排序时,您可能有一个希望与基础单元格一起移动的复选框。不过,如果您有一个希望一直保持在特定位置的列表框,则您可能希望它不与其基础单元格一起移动。 Excel 有两种类型的控件:表单控件和ActiveX 控件。除这两个控件集之外,您还可以通过绘图工具(如、、SmartArt 图形或文本框)添加对象。 以下部分介绍这些控件和绘图对象,此外,还更为详细地介绍如何使用这些控件和对象。

pragma的用法

#pragma的用法 在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义, 编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。 其格式一般为: #pragma para。其中para为参数,下面来看一些常用的参数。 1)message 参数 message参数是我最喜欢的一个参数,它能够在编译信息输出窗口中输出相应的信息,这对于源代码信息的控制是非常重要的。其使用方法为: #pragma message("消息文本") 当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。 当我们在程序中定义了许多宏来控制源代码版本的时候,我们自己有可能都会忘记有 没有正确的设置这些宏, 此时我们可以用这条指令在编译的时候就进行检查。假设我们希望判断自己有没有在源代码的什么地方定义了_X86这个宏, 可以用下面的方法: #ifdef _X86 #pragma message("_X86 macro activated!") #endif 我们定义了_X86这个宏以后,应用程序在编译时就会在编译输出窗口里显示"_86 macro activated!"。 我们就不会因为不记得自己定义的一些特定的宏而抓耳挠腮了。 (2)另一个使用得比较多的pragma参数是code_seg 格式如: #pragma code_seg( ["section-name" [, "section-class"] ] ) 它能够设置程序中函数代码存放的代码段,当我们开发驱动程序的时候就会使用到 它。 (3)#pragma once (比较常用) 只要在头文件的最开始加入这条指令就能够保证头文件被编译一次,这条指令实际上 在VC6中就已经有了, 但是考虑到兼容性并没有太多的使用它。 (4)#pragma hdrstop 表示预编译头文件到此为止,后面的头文件不进行预编译。BCB可以预编译头文件以 加快链接的速度, 但如果所有头文件都进行预编译又可能占太多磁盘空间,所以使用这个选项排除一些头文

stm32中使用#pragma pack(非常有用的字节对齐用法说明)

#pragma pack(4) //按4字节对齐,但实际上由于结构体中单个成员的最大占用字节数为2字节,因此实际还是按2字节对齐 typedef struct { char buf[3];//buf[1]按1字节对齐,buf[2]按1字节对齐,由于buf[3]的下一成员word a是按两字节对齐,因此buf[3]按1字节对齐后,后面只需补一空字节 word a; //#pragma pack(4),取小值为2,按2字节对齐。 }kk; #pragma pack() //取消自定义字节对齐方式 对齐的原则是min(sizeof(word ),4)=2,因此是2字节对齐,而不是我们认为的4字节对齐。 这里有三点很重要: 1.每个成员分别按自己的方式对齐,并能最小化长度 2.复杂类型(如结构)的默认对齐方式是它最长的成员的对齐方式,这样在成员是复杂类型时,可以最小化长度 3.对齐后的结构体整体长度必须是成员中最大的对齐参数的整数倍,这样在处理数组时可以保证每一项都边界对齐 补充一下,对于数组,比如: char a[3];这种,它的对齐方式和分别写3个char是一样的.也就是说它还是按1个字节对齐. 如果写: typedef char Array3[3]; Array3这种类型的对齐方式还是按1个字节对齐,而不是按它的长度. 不论类型是什么,对齐的边界一定是1,2,4,8,16,32,64....中的一个. 声明: 整理自网络达人们的帖子,部分参照MSDN。 作用: 指定结构体、联合以及类成员的packing alignment; 语法: #pragma pack( [show] | [push | pop] [, identifier], n ) 说明: 1,pack提供数据声明级别的控制,对定义不起作用; 2,调用pack时不指定参数,n将被设成默认值; 3,一旦改变数据类型的alignment,直接效果就是占用memory的减少,但是performance会下降; 语法具体分析: 1,show:可选参数;显示当前packing aligment的字节数,以warning message的形式被显示; 2,push:可选参数;将当前指定的packing alignment数值进行压栈操作,这里的栈是the internal compiler stack,同时设置当前的packing alignment为n;如果n没有指定,则将当前的packing alignment数值压栈; 3,pop:可选参数;从internal compiler stack中删除最顶端的record;如果没有指定n,则当前栈顶record即为新的packing alignment 数值;如果指定了n,则n将成为新的packing aligment数值;如果指定了identifier,则internal compiler stack中的record都将被pop 直到identifier被找到,然后pop出identitier,同时设置packing alignment数值为当前栈顶的record;如果指定的identifier并不存在于internal compiler stack,则pop操作被忽略; 4,identifier:可选参数;当同push一起使用时,赋予当前被压入栈中的record一个名称;当同pop一起使用时,从internal compiler stack 中pop出所有的record直到identifier被pop出,如果identifier没有被找到,则忽略pop操作; 5,n:可选参数;指定packing的数值,以字节为单位;缺省数值是8,合法的数值分别是1、2、4、8、16。 重要规则: 1,复杂类型中各个成员按照它们被声明的顺序在内存中顺序存储,第一个成员的地址和整个类型的地址相同; 2,每个成员分别对齐,即每个成员按自己的方式对齐,并最小化长度;规则就是每个成员按其类型的对齐参数(通常是这个类型的大小)和指定对齐参数中较小的一个对齐; 3,结构体、联合体或者类的数据成员,第一个放在偏移为0的地方;以后每个数据成员的对齐,按照#pragma pack指定的数值和这个数据成员自身长度两个中比较小的那个进行;也就是说,当#pragma pack指定的值等于或者超过所有数据成员长度的时候,这个指定值的大小将不产生任何效果; 4,复杂类型(如结构体)整体的对齐是按照结构体中长度最大的数据成员和#pragma pack指定值之间较小的那个值进行;这样当数据成员为复杂类型(如结构体)时,可以最小化长度; 5,复杂类型(如结构体)整体长度的计算必须取所用过的所有对齐参数的整数倍,不够补空字节;也就是取所用过的所有对齐参数中最大的那个值的整数倍,因为对齐参数都是2的n次方;这样在处理数组时可以保证每一项都边界对齐; 对齐的算法:由于各个平台和编译器的不同,现以本人使用的gcc version 3.2.2编译器(32位x86平台)为例子,来讨论编译器对struct 数据结构中的各成员如何进行对齐的。 在相同的对齐方式下,结构体内部数据定义的顺序不同,结构体整体占据内存空间也不同,如下: 设结构体如下定义: struct A { int a; //a的自身对齐值为4,偏移地址为0x00~0x03,a的起始地址0x00满足0x00%4=0;

vf表单控件的使用说明

一、标签 标签能够显示多个字符构成的文本,用于设计表单上所需的文字性提示信息。标签和大多数控件的不同点在于运行表单时不能用《tab》键来选择标签。 常用的标签属性及其作用如下。 1、Caption:确定标签处显示的文本。 2、Visible:设置标签可见还是隐藏。 3、AutoSize:确定是否根据标签上显示文本的长度,自动调整标签大小。 4、BackStyle:确定标签是否透明。 5、WordWrap:确定标签上显示的文本能否换行。 6、FontSize:确定标签上显示文本所采用的字号。 7、FontName:确定标签上显示文本所采用的字体。 8、ForeColor:确定标签上显示的文本颜色。 二、命令按钮和命令按钮组 在各种窗口或对话框中几乎都要使用一个或多个命令按钮。一旦用户单击一个命令按钮,就可实现某种规定的操作。例如,各种对话框中的“确定”按钮,当用户单击时将结束对话框的操作。 VisualForPro中的命令按钮控件同样用于完成特定的操作。操作的代码通常放在命令按钮的“单击”事件(即Click Event)代码中。这样,运行表单时,当用户单击命令按钮时便会执行Click事件代码。如果在表单运行中,某个命令按钮获得了焦点(这时,这个命令按钮上会比其他命令按钮多一个线框),则当用户按下《Enter》键或空格键时,也会执行这个命令按钮的Click时间代码。 常用的命令按钮属性及其作用如下: 1、Caption:设置在按钮上显示的文本。 2、Default:在表单运行中,当命令按钮以外的某些控件(如文本框)获得焦点时,若 用户按下《Enter》键,将执行Default属性值为.T.的那个命令按钮的click事件代码。 3、Cancel:如果设置该属性值为.T.,则当用户按下键时,将执行命令按钮的click 事件的代码。 4、Enabled:指明按钮是否失效,即是否被选择。当Enabled属性值为.f.时,用户无法 选择该按钮。 5、DisabledPicture:指定按钮失效时在按钮上显示的.bmp文件。 6、DownPicture:指定在按钮按下时按钮上显示的.bmp文件。 7、Visible:指明按钮是否可见。 8、Picture:指明显示在按钮上的.bmp文件。 命令按钮组时一组命令按钮,是容器对象。使用命令按钮组便于对一组命令按钮进行统一操作和设置。命令按钮组的ButtonCount属性值,决定组中命令按钮的个数。 表单运行时,当用户单击组中某个命令按钮时,命令按钮组的Value属性可以返回所单击按钮的序号。若要单独设置组中的某个命令按钮的属性,可以使用命令按钮组的快捷菜单中的“编辑”命令选择某个按钮,在“属性”窗口中设置其属性。若为组中某个按钮的Click事件写了代码,当单击这个按钮时,将执行该按钮的Click事件代码而不是组的Click事件代码。 三、选项按钮组 选项按钮组是常用的一种控件,用在各种对话框中,让用户从给定几个操作中选择一个。例如“文件”菜单中“新建”菜单项打开“新建”对话框,该对话框中有一个标题为“文件类型”的选项按钮组,让用户选择建立哪一种类型的文件。

#pragma指令用法汇总和解析

#pragma指令用法汇总和解析 一. message 参数。 message 它能够在编译信息输出窗 口中输出相应的信息,这对于源代码信息的控制是非常重要的。其使用方法为: #pragma message(“消息文本”) 当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。 当我们在程序中定义了许多宏来控制源代码版本的时候,我们自己有可能都会忘记有没有正确的设置这些宏,此时我们可以用这条 指令在编译的时候就进行检查。假设我们希望判断自己有没有在源代码的什么地方定义了_X86这个宏可以用下面的方法 #ifdef _X86 #pragma message(“_X86 macro activated!”) #endif 当我们定义了_X86这个宏以后,应用程序在编译时就会在编译输出窗口里显示“_ X86 macro activated!”。我们就不会因为不记得自己定义的一些特定的宏而抓耳挠腮了 二. 另一个使用得比较多的#pragma参数是code_seg。格式如: #pragma code_seg( [ [ { push | pop}, ] [ identifier, ] ] [ "segment-name" [, "segment-class" ] ) 该指令用来指定函数在.obj文件中存放的节,观察OBJ文件可以使用VC自带的dumpbin命令行程序,函数在.obj文件中默认的存放节 为.text节 如果code_seg没有带参数的话,则函数存放在.text节中 push (可选参数) 将一个记录放到内部编译器的堆栈中,可选参数可以为一个标识符或者节名 pop(可选参数) 将一个记录从堆栈顶端弹出,该记录可以为一个标识符或者节名 identifier (可选参数) 当使用push指令时,为压入堆栈的记录指派的一个标识符,当该标识符被删除的时候和其相关的堆栈中的记录将被弹出堆栈 "segment-name" (可选参数) 表示函数存放的节名 例如: //默认情况下,函数被存放在.text节中 void func1() { // stored in .text } //将函数存放在.my_data1节中 #pragma code_seg(".my_data1") void func2() { // stored in my_data1 } //r1为标识符,将函数放入.my_data2节中 #pragma code_seg(push, r1, ".my_data2") void func3() { // stored in my_data2 } int main() { } 三. #pragma once (比较常用) 这是一个比较常用的指令,只要在头文件的最开始加入这条指令就能够保证头文件被编译一次 四. #pragma hdrstop表示预编译头文件到此为止,后面的头文件不进行预编译。

表单控件常用属性、事件及方法英中对照

VFP表单/控件常用属性、事件及方法英中对照 ——属性—— Name:表单或控件名 Caption:标题文字 AutoCenter:自动居中 AutoSize:自动大小 ForeColor:前景色 BackColor:背景色 Closable:可关闭 Movable:可移动 Width:宽度 Height:高度 Icon:图标 Visible:可见 Font*:字体、字号等 Enabled:能用 ButtonCount:命令按钮组、选项组控件中控件的个数 Buttons(1):命令按钮组、选项组控件中第一个控件;Buttons(2)命令按钮组、选项组控件中第二个控件;…… value:表示组控件中选中的是第几个控件 或文本框中的内容 或列表框中选择的内容 等 PasswordChar:文本框用于输密码时显示的符号 ControlSource:和控件绑定的内存变量或字段SelStart:编辑框中选定内容的开始位置SelLength:编辑框中选定内容的长度SelText:编辑框中选定的内容 ListCount:列表框中可供选择的内容数 List(1)表示列表框中的第一项内容,List(2)表示列表框中的第二项内容,……RowSourceType:列表框中内容的给出方式RowSource:列表框中内容来自的字段名等MultiSelect:1或.t.时允许多项选择 Selected(1)为真,第一项被选;Selected(2)为真,第二项被选;……。 Text:下拉列表框中输入的内容Recordsource:表格控件绑定的表PageCount:页框中页面的个数 Pages(1)表示页框中的第一个页面,Pages (2)表示页框中的第二个页面,……ActivePage:页框中的活动页面号Increment:微调每次的变化量SpinnerHighValue:鼠标调整时的最大值SpinnerLowValue:鼠标调整时的最小值KeyboardHighValue:键盘输入时的最大值KeyboardLowValue:键盘输入时的最小值Value:微调的当前值 Picture:图像控件对应的图像 Stretch:图像的显示方式 Interval:计时器定时的时间间隔,单位毫秒 ——事件—— Load:装入事件 Init:初始化事件 Destroy:表单关闭前发生的事件Unload:表单关闭时发生的事件Click:单击事件 DblClick:双击事件 RightClick:右键事件 GotFocus:得到焦点事件 LostFocus:失去焦点事件 Timer:计时器指定的时间间隔到时发生 Error:执行对象事件代码出错时发生——方法—— Release:关闭表单Refresh:表单刷新Show:显示表单Hide:隐藏表单SetFocus:将焦点放到控件中 AddItem(内容项):向列表框中增加数据项RemoveItem(位置):从列表框中删数据项

向量化的方法

使用英特尔编译器进行自动向量化 作者:Yang Wang (Intel) 自动向量化是英特尔编译器提供的一个可以自动的使用SIMD指示的功能。在处理数据时,编译器自动选择MMX?, Intel? Streaming SIMD 扩展(Intel? SSE, SSE2, SSE3 和SSE4)等指令集,对数据进行并行的处理。使用编译器提供的自动向量化功能是提高程序性能的一个非常有效的手段。自动向量化在IA-32和Intel? 64的平台上均提供很好的支持。 英特尔编译器提供的自动向量化相关的编译选项如下所示。”/Q”开头的选项是针对Windows平台的,“-“开头的选项是针对Linux*和Mac平台的。 -x, /Qx 按照该选项指定的处理器类型生成相应的优化代码。比如-xSSE3, 该选项指定编译器生成Intel? SSE3指令的代码。又比如-xSSE3_ATOM, 该选项针对Intel? Atom? 处理器进行优化。 -ax, /Qax 如果指定该选项,在生成的单一目标文件中,不但会生成专门针对指定的处理器类型进行优化的代码,同时也生成通用的IA-32架构的代码。该选项主要是为了生成代码的兼容性考虑。 -vec, /Qvec 打开或者关闭编译器的向量化优化。默认情况下自动向量化是打开的。 -vec-report, /Qvec-report 该选项用户控制在编译过程中产生的向量化消息报告。 编译器提供的自动向量化优化默认情况下是打开的。在编译过程中我们可以使用-vec-report选项来打开向量化诊断消息报告。这样编译器可以告诉我们有哪些循环被向量化了,有哪些循环没有被向量化已经无法向量化的原因。 在编译程序的过程中,有时候我们会发现编译器报告说某个循环无法被向量化。很多时候无法向量化的原因都是因为循环中存在的变量依赖关系。有时候我们可以修改程序来消除这种依赖关系,有的时候我们可以使用编译器提供的一些编译指示来显示的告诉编译器如何处理这种依赖关系。即使在某个循环已经可以被自动向量化的时候,使用编译器提供的对向量化的语言支持和编译指示还可以提高编译器向量化的效率,提高程序执行的性能。 下面我们来详细解释一下编译器提供的编译指示以及这些指示对编译器编译的影响。 在Intel编译器中,我们提供下面这样一些对自动向量化的语言支持和编译指示。 __declspec(align(n)) 指导编译器将变量按照n字节对齐 __declspec(align(n,off)) 指导编译器将变量按照n字节再加上off字节的编译量进行对齐 restrict 消除别名分析中的二义性 __assume_aligned(a,n) 当编译器无法获取对齐信息时,假定数组a已经按照n字节对齐 #pragma ivdep 提示编译器忽略可能存在的向量依赖关系 #pragma vector {aligned|unaligned|always}

OpenMP的用法

在双重循环中怎样写OpenMP? 那要分析你的外循环跟内循环有没有彼此依赖的关系 unsigned int nCore = GetComputeCore(); unsigned int nStep = IMAGETILEYSIZE / nCore; #pragma omp parallel for private(Level0_x, Level0_y, ChangeLevel0_x, ChangeLevel0_y, InterX1, InterX2, InterY1, InterY2) for (int k = 0; k < nCore; k++) { int begin = k * nStep; int end = (k + 1) * nStep; for (int YOff = begin; YOff < end; YOff++) { for (int XOff = 0; XOff < IMAGETILEXSIZE; XOff++) { Level0_x = pPixelXBuf[YOff][XOff]; Level0_y = pPixelYBuf[YOff][XOff]; ChangeLevel0_x = Level0_x - XMin; ChangeLevel0_y = Level0_y - YMin; //寻找坐标在Level1Buf中对应的4个像素值 InterX1 = (int)(ChangeLevel0_x); InterX2 = (int)(ChangeLevel0_x + 1); InterY1 = (int)(ChangeLevel0_y); InterY2 = (int)(ChangeLevel0_y + 1); //双线性插值对Level0_Buf赋值 ZoomInterpolation(Level0Buf, Level1Buf, ChangeLevel0_x, ChangeLevel0_y, SamplesPerPixel, nXSize, nYSize, InterX1, InterX2, InterY1, InterY2, XOff, YOff); } } } 我也想应该这样,可是如果nCore=1的时候,外循环只循环一次,线程是怎么分配的呢。其实最外层的循环如果很多,就在外循环分配线程是不是就可以不考虑里面的循环了? nCore = 1,就是单核单cpu,多核循环就跟普通的循环没有差别, openmp默认有几个内核就开几个线程同时运行。所以单核openmp也没有什么意义,此时你也可以开两个线程“同时”运行,但在单核机器上,两个线程是不可能同时运行的 可以不考虑里面的循环。你只要保证外循环跟外循环之间,内寻环跟内循环之间没有数据依赖关系就行。 假设 for (int i = 0; i < 200000000; i++)

表单和控件测试题(6)

在下列VFP的基类中,无CAPTION属性的基类是_________ A. 标签 B. 文本框 C. 选项按钮 D. 复选框 解答:B 参考答案: B 2. 单选题:(1.0分) 将某个控件绑定到一个字段,移动记录后字段的值发生变化,这时该控件的_______属性的值也随之变化。 A. Value B. Name C. Caption D. 没有 解答:A 参考答案: A 3. 单选题:(1.0分) 用户在VFP中创建子类或表单时,不能新建的是 ______________. A. 属性 B. 方法 C. 事件 D. 事件的方法代码 解答:C 参考答案: C 4. 单选题:(1.0分) 如果要引用一个控制所在的直接容器对象,则可以使用下列_____属性。 A. THIS B. THISFORM C. PARENT D. 都可以 解答:C 参考答案: C 5. 单选题:(1.0分) 命令按钮中显示的文字内容,是在属性_______中设置的。 A. Name B. Caption C. FontName D. ControlSource 解答:B 参考答案: B

当用鼠标使组合框的内容发生变化时,将首先触发_______事件。 A. InteractiveChange B. Click C. Init D. DownClick 解答:A 参考答案: A 7. 单选题:(1.0分) 若要建一个有5个按钮的选项组,应将属性_____的值改为5。 A. Optiongroup B. Buttoncount C. BoundColumn D. ControlSource 解答:B 参考答案: B 8. 单选题:(1.0分) VFP系统环境下,运行表单的命令为_______。 A. DO FORM <表单名> B. REPORT FORM <表单名> C. DO <表单名> D. 只能在项目管理器中运行 解答:A 参考答案: A 9. 单选题:(1.0分) 建立事件循环的命令为______ 。 A. READ EVENTS B. CLEAR EVENTS C. DO WHILE……ENDDO D. FOR………ENDFOR 解答:A 参考答案: A 10. 单选题:(1.0分) 设有一个页框含有3个页面,其中第一个页面的名字为Page1,上面有二个命令按钮:CmdOk、CmdPrint,如果要在CmdPrint的Click事件中引用CmdOk的Click事件代码,则采用_______ 。 A. This.Parent.CmdOk.Click() B. Thisform.Page1.CmdOk.Click() C. This.CmdOk.Click() D. Thisform.CmdOk.Click() 解答:D 参考答案: A

sizeof用法总结

sizeof用法总结 本文主要包括二个部分,第一部分重点介绍在VC中,怎么样采用sizeof来求结构的大小,以及容易出现的问题,并给出解决问题的方法,第二部分总结出VC中sizeof的主要用法。 1、sizeof应用在结构上的情况 请看下面的结构: struct MyStruct { double dda1; char dda; int type }; 对结构MyStruct采用sizeof会出现什么结果呢?sizeof(MyStruct)为多少呢?也许你会这样求: sizeof(MyStruct)=sizeof(double)+sizeof(char)+sizeof(int)=13 但是当在VC中测试上面结构的大小时,你会发现sizeof(MyStruct)为16。你知道为什么在VC中会得出这样一个结果吗? 其实,这是VC对变量存储的一个特殊处理。为了提高CPU的存储速度,VC对一些变量的起始地址做了“对齐”处理。在默认情况下,VC规定各成员变量存放的起始地址相对于结构的起始地址的偏移量必须为该变量的类型所占用的字节数的倍数。下面列出常用类型的对齐方式(vc6.0,32位系统)。 类型 对齐方式(变量存放的起始地址相对于结构的起始地址的偏移量) Char 偏移量必须为sizeof(char)即1的倍数 int 偏移量必须为sizeof(int)即4的倍数 float 偏移量必须为sizeof(float)即4的倍数 double 偏移量必须为sizeof(double)即8的倍数

Short 偏移量必须为sizeof(short)即2的倍数 各成员变量在存放的时候根据在结构中出现的顺序依次申请空间,同时按照上面的对齐方式调整位置,空缺的字节VC会自动填充。同时VC为了确保结构的大小为结构的字节边界数(即该结构中占用最大空间的类型所占用的字节数)的倍数,所以在为最后一个成员变量申请空间后,还会根据需要自动填充空缺的字节。 下面用前面的例子来说明VC到底怎么样来存放结构的。 struct MyStruct { double dda1; char dda; int type }; 为上面的结构分配空间的时候,VC根据成员变量出现的顺序和对齐方式,先为第一个成员dda1分配空间,其起始地址跟结构的起始地址相同(刚好偏移量0刚好为sizeof(double)的倍数),该成员变量占用sizeof(double)=8个字节;接下来为第二个成员dda分配空间,这时下一个可以分配的地址对于结构的起始地址的偏移量为8,是sizeof(char)的倍数,所以把dda存放在偏移量为8的地方满足对齐方式,该成员变量占用sizeof(char)=1个字节;接下来为第三个成员type分配空间,这时下一个可以分配的地址对于结构的起始地址的偏移量为9,不是sizeof(int)=4的倍数,为了满足对齐方式对偏移量的约束问题,VC自动填充3个字节(这三个字节没有放什么东西),这时下一个可以分配的地址对于结构的起始地址的偏移量为12,刚好是sizeof(int)=4的倍数,所以把type存放在偏移量为12的地方,该成员变量占用sizeof(int)=4个字节;这时整个结构的成员变量已经都分配了空间,总的占用的空间大小为:8+1+3+4=16,刚好为结构的字节边界数(即结构中占用最大空间的类型所占用的字节数sizeof(double)=8)的倍数,所以没有空缺的字节需要填充。所以整个结构的大小为: sizeof(MyStruct)=8+1+3+4=16,其中有3个字节是VC自动填充的,没有放任何有意义的东西。 下面再举个例子,交换一下上面的MyStruct的成员变量的位置,使它变成下面的情况: struct MyStruct { char dda; double dda1;

相关主题
文本预览
相关文档 最新文档