一: CMnue的使用
1 如何在dolog中加载一个菜单
首先添加一个CMenu *mu变量
在 与dolog 初始函数中 OnInitDialog()
加入 mu = new (CMenu);// 创建一个新的菜单
mu.LoadMenu(IDR_MENU);// 装载菜单
SetMenu(mu); //显示菜单
2 如何对菜单进行操作
改变 菜单标示
CMenu::ModifyMenu
BOOL ModifyMenu( UINT nPosition, UINT nFlags, UINT nIDNewItem = 0, LPCTSTR lpszNewItem = NULL );
nPosition 即需要改变的菜单ID;
nFlags 1: MF_BYCOMMAND 菜单ID; 2:MF_BYPOSITION 指出菜单顺序位置,从0开始
nIDNewItem 1: ID_自身 改变自身菜单
2: MF_POPUP 指定下拉式菜单/子菜单 句柄
lpszNewItem :需要更改的内容
如:
3 如何是菜单控件有效无效
UINT EnableMenuItem( UINT nIDEnableItem, UINT nEnable );
其中nEnable有
MF_BYCOMMAND:指定参数给出已存在的菜单命令ID号
MF_BYPOSITION:指定参数给出已经存在的菜单位置
MF_DISABLED:使菜单项无效,以便以后不能被选中但不变灰
MF_GRAYED:使得菜单项无效,并变灰
MF_ENABLED:使得菜单有效,以便他们能够被选中,并且可以从灰色状态恢复。
注意,任何改变都要用CMenu重绘来显示,用SetMenu。
二:对话框问题
1)模态 使用创建使用
2)非模态,不同于模态,非模态对话框弹出后,依然可以使用父对话框,而模态不行。模态必须结束子对话框才能继续使用父对话框。
非模态对话框使用不用上面方式来创建,一般使用指针来创建
3)非模态对话框的销毁
如何不对非模态的对话框进行重载OnCancel,那么对话框只是被隐藏,并没有被销毁,资源也不会释放。
如何销毁非模态对话框
1.重载OnCancel并调用 DestroyWindow();函数注意这个函数必须放在最后面,调用后直接进入PostNcDestroy()函数,如果还有资源未释放,则会出错
2.重载PostNcDestroy(),这里对话框将会被真正的销毁。
4)如何从子对话框中获取服对话框句柄进行通信
CWnd::GetParent ();//注意要进行类型强制转换;
完整型 HWND GetParent( HWND hWnd // handle to child window);//如果父类对话框不存在则返回NULL
三:视窗,对话框大小改动相应
afx_msg void OnSize( UINT nType, int cx, int cy );
对应视窗改变,对话框大小改变从而改变控件的大小需要在在该函数内部进行。
四:如何将各类型数据直接转换成字符串
使用Sprintf(char *buf_A,"%f",a);
a是需要转换的数据,buf_A是转换成字符串的存储地址。
注意:%f只保留6位有效数据。
需要保留多位小数点数据则使用%.nf
n为指定保留的小数点数据位
注意:和printf的区别。printf只是将数据打印到指定的显示器中。
五:将字符串中的数据转化成相应的类型
第一类 ato?: 需要包含 #include <stdlib.h>
double atof( const char *string );//转换成float
int atoi( const char *string );//转换成int
__int64 _atoi64( const char *string );
long atol( const char *string );//转换成long int
函数将扫描字符串,跳过非数字字符,知道第一个数字或者正负号开始转换遇到非数字字符或者字符串结束符('/0')结束并返回结果
第二类 stirto? #include <stdlib.h>
double strtod( const char *nptr, char **endptr );//转换成double
double wcstod( const wchar_t *nptr, wchar_t **endptr );//宽字节转换成double
long strtol( const char *nptr, char **endptr, int base );//long int
long wcstol( const wchar_t *nptr, wchar_t **endptr, int base );
使用时只需要定义 char *nptr//需要实体
char *en//只需要指针不需要实体化
这类型函数将遇到nptr中的第一个数字字符或者正负号转换成相应的数据,遇到非数字字符结束,并将剩余的字符字符串保留在ne中,ne是转换停止的后续字符串,而对long,其中base为位数基础。这样就可以直接转换成16位,8位,32位的数据:
如 msdn例子
该类型函数还有:
int StrToInt( LPCTSTR lpSrc );
2)char,int 等转换成CString
使用