const 在*号左边,指针所指变量是常量,const在 * 号右边,指针是常量!
指向常量的指针:普通指针,指针可被赋值,常量不能赋值。
const int num1 = 12;
const int num2= 15
const int* pNum = &num1;
*pNum = 15;//error:不能给常量赋值
pNum = &num2//ok 可以修改指针变量的指向;
指针常量:指针变量是常量,即指针不可再赋值。
int num1=12;
int * const pNum = &num1;//必须定义时就初始化
int num2 = 15;
pNum=$num2;//error:不能修改指针常量的值
CLR数组:
一维数组:
array<int>^ data;
data = gcnew array<int>(10);
或者
array<int>^ data = {0,2,4,5,6};
二维数组:
array<int,2>^ data = gcnew array<int,2>(3,4);
//赋值
data[row,col] = xx;//区别于data[row][col]
/ C++
//头文件
#include <stdio.h>//从系统目录搜索
#include "stdio.h" //从当前目录搜索
//Struct
c语言结构体中包含方法,c++中可以有
// MFC
//window 执行
WinMain()-> WNDCLASS- >RegisterClass->CreateWindow()->ShowWIndow->while(getMsg)->WinSunProc()
//MFC原理
cTestApp -> CWindApp->WinMain()->紧接着调用CTestApp的initInstance()- >CMainFrame,CView,CDialog等(申明WNDCLASS,注册类,创建窗口)->消息循环
//以消息映射代替消息循环
mfc采用方案:
表(类实例---窗口句柄)
产生消息->窗口句柄->类实例->父类(Cwnd等)的WindowProc()->OnWndMsg()-> 根据注释宏(消息函数映射)->找到事件响应函数;
其它不可行方案:
在基类为每种消息申明虚函数。
//打开一个对话框
//创建一对话框
插入资源->添加对应类
//通过menu显示一个对话框
新建菜单项->属性->去掉pop_up选项(分配资源ID)->添加事->在事件函数类中引入对话框头文件
一模态对话框:
CTestDiag testDiag;
testDiag.doModel();
一飞模态对话框
CTestDiag * testDiag = new CtestDiag();//必须是成员变量,或者在堆内存分配。因为事件函数会自动销毁局部变量!
testDiag->Create(对话框资源ID,*parent);
testDiag->ShowWindow(SW_SHOW);
注意内存回收,非模态对话框不自动对资源销毁。点默认OK按钮,模态对话框通过父类执行虚函数销毁!
前台与后台数据交互
1.TextFiedl操作,Label(注意Label要勾选Styles->Notify才能接受消息)也可以通过资源ID关联成员变量方式
GetDlgItem("资源ID")->GetWindowText(str)
GetDlgItem("资源ID")->SetWindowText(str)
CString str;
GetDlgItemText(str) ,str=="xxx";
GetDlgItemInt()
2.资源ID关联成员变量方式
注意要使用UpdateData()
3.使用SendMessage成员函数改变数据交互
SendMessage(WM_GETTEXT,10,(LPARAM)ch2);
SendItemMessage(资源ID,WM_GETTEXT,10,(LPARAM)ch2);
//字符与数字转换
atoi,atof,itoa
用图片控件做凹分割线,做区域收缩
将图片控件拉成一个线,属性->style->勾选->Sunken
static CRect rectLarge;
static CRect rectSmall;
/TAB //
GetNextWindow()->SetFocus();
GetFocus()->GetNextWindow()->SetFocus();