笔记 Ever_King.Lee
笔记
Ever_King.Lee
联系我
Index
一、C、C++、MFC、汇编
1.1、 文件读写
1.2、 申请内存空间
1.3、 MFC EDIT 控件输入输出数据
1.4、 微机汇编常用指令
1.5、 打开文件对话框示例
1.6、 存储文件对话框示例
1.7、 YUV 与 RBG 互换公式
1.8、 动态改变对话框标题
1.9、 单选/复选控件使用方法
1.10、BMP 位图显示方法
1.11、截取 Cstring 中某一部分_例
1.12、格式化 CString 数据
1.13、CString 数据写入到文件
1.14、读取数据文件到 Cstring 对象
1.15、绘图
1.16、使按钮/菜单项失效和生效
1.17、在EDIT控件中追加输出文本
1.18、判断MessageBox按下的按钮
1.19、char *和CString相互转换
1.20、隐藏文件
1.21、实现真彩色的按钮
1.22、非模态对话框的创建与销毁
1.23、移动和复制文件
笔记 Ever_King.Lee
一、C、C++、微机汇编
1.1、文件读写:
1.1.1 标准 C
头文件:#include <stdio.h>
变量声明:FILE *fp;
文件打开:
if((fp0=fopen("E:\\s\\students_0001.yuv","rb"))==NULL)
printf("Open file1 E:\\s\\0001.yuv erro\n");
else
printf("Open file1 E:\\s\\0001.yuv success!\n");
从文件读入: fread(ybuf0,352,1,fp0);
写到文件: fwrite(ybuf0,352,1,fp0);
文件关闭: fclose(fp0);
参考资源连接
1.1.2 Visual studio 2005 MFC 下
声明: CFile fp0;
CString filenam;
filenam= "E:\\test1.bmp";
打开文件:
if(!fp0.Open(filenam,CFile::modeRead))
{
TRACE("Open file1 erro!\n");
return;
}
文件读: fp0.Read(headmap,54);
文件写: fp0.Write(headmap,54);
文件关闭: fp0.Close();
1.2、申请内存空间
1.2.1 标准 C
头文件:#include <stdio.h>
声明变量:unsigned char *buf0;
申请空间:buf0= (unsigned char *)malloc(352);
释放:free(buf0);
1.2.2 Visual studio 2005 MFC 下
声明变量:unsigned char *buf0;
申请空间:buf0 = new unsigned char [352];
释放: delete(buf0);
1.3、MFC EDIT 控件输入输出数据
1.3.1 手动添加变量
***Dlg.h 文件->Class C***Dlg 定义要使用的变量,如 int x;
***Dlg.cpp 文件 –> C***Dlg::C***Dlg(CWnd* pParent /*=NULL*/)
: CDialog(C***Dlg::IDD, pParent) 赋初值
-> void C***Dlg::DoDataExchange(CDataExchange* pDX)
DDX_Text(pDX,IDC_EDIT1,x);关联到变量
-> 其他函数中使用: UpdateData (TRUE); 将控件中当前数据输入到变量;
UpdateData(FALSE);将当前变量值输出到控件显示。
笔记 Ever_King.Lee
1.3.2 快速添加变量
在 Edit Control 添加的控件上点击右键->Add varible,在 variable type 中选择类型,在
Category(类别)里选择 Value 之后可以使用 int char 等数据类型。
1.4、微机汇编常用指令
标识符:__asm{ 汇编语句 }
1.4.1 PXOR dst,src ;16Bytes 按位异或。
1.4.2 MOVDQU xmm0,[eax]; 16Bytes 取 eax 指向的 memory 中数的数据。
1.4.3 punpcklbw xmm0,xmm2; P – pack 处理指令 16Byte ,unpck –解包 ,L –处理低字
节 ,BW –将 byte 转成 Word ;
指令运算过程 xmm0[15..0] = xmm2[7..0](H):xmm0[7..0](L) ,类推
1.4.4 packuswb xmm0,xmm2; pack 指令,US – 无符号数 ,SS-有符号数 ,
WB –将 Word 转成 Byte 数据。
运算:xmm0 = xmm2:xmm0;
1.5、 打开文件对话框示例
CFileDialog DlgyuvFile(TRUE,_T("yuv"),NULL,OFN_HIDEREADONLY,_T("YUV File(*.yuv)|*.yuv||"),NULL);
if(IDOK == DlgyuvFile.DoModal())
{
srcfilename=DlgyuvFile.GetPathName(); //Cstring *
UpdateData(FALSE);
}
else
{
MessageBox(_T("没有选择要打开的文件"));
return;
}
1.6、 存储文件对话框示例
CFileDialog DlgbmpFile(FALSE,_T("bmp"),NULL,OFN_OVERWRITEPROMPT,_T("BMP File(*.Bmp)|*.Bmp||"),NULL);
if(IDOK == DlgbmpFile.DoModal())
{
dstfilename = DlgbmpFile.GetPathName(); //Cstring *
UpdateData(FALSE);
}
else
{
MessageBox(_T("没有选择要存储的文件"));
return;
}
1.7、YUV 与 RGB 互换公式
YUV4:1:1 转 RGB-24bit
R= 1.0Y + 0 +1.402 (V-128)
G= 1.0Y - 0.34413(U-128)-0.71414(V-128)
B= 1.0Y + 1.772 (U-128)+0
R=1.164*(Y-16)+1.596*(Cr-128)
G=1.164*(Y-16)-0.813*(Cr-128)-0.392*(Cb-128)
B=1.164*(Y-16)+1.596*(Cr-128)
RGB to YUV
Y = (0.257 * R) + (0.504 * G) + (0.098 * B) + 16
笔记 Ever_King.Lee
Cr = V = (0.439 * R) - (0.368 * G) - (0.071 * B) + 128
Cb = U = -(0.148 * R) - (0.291 * G) + (0.439 * B) + 128
YUV422 to RGB
B = 1.164(Y - 16) + 2.018(U - 128)
G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)
R = 1.164(Y - 16) + 1.596(V - 128)
1.8、 动态改变对话框标题
方法:(1) public:
virtual BOOL OnInitDialog(); //函数 ,在相应对话框(如 loaded 对话框)的相应头文件中添加该项。
(2) BOOL loaded::OnInitDialog()
{
SetWindowTextW((_T("Hello ")+nameT+_T(" Welcome to DK System!")));
return TRUE;
} //在对应对话框(如 loaded 对话框)的.cpp 文件中单独添加该函数,其中 nameT 为 Cstring 类型。并返回一个值。
1.9 单选/复选控件使用方法
单选控件使用方法
使用方法一:
在工程中添加控件后,直接在控件的 Click 事件中写入需要的代码即可
使用方法二:
1.建立一个基于对话框的用用程序,在其中加入三个 Radio Button,ID 分别为:
IDC_RADIO1,IDC_RADIO2,IDC_RADIO3
2.控件的初始化:
在对话框类的 OnInitDialog 中加入代码: //相当于初始化
CheckRadioButton(IDC_RADIO1,IDC_RADIO3,IDC_RADIO3); //第一个参数为该组的第一个单选按钮的 ID
//第二个参数为该组的最后一个单选按钮的 ID
//第三个参数为该组中被选中的单选按钮的 ID
3.在加入一个 Button 控件,并为其写入 Click 事件代码:
int iRadioButton;
iRadioButton=GetCheckedRadioButton(IDC_RADIO1,IDC_RADIO3);
if(iRadioButton==IDC_RADIO1)
MessageBox("Click Button1");
if(iRadioButton==IDC_RADIO2)
MessageBox("Click Button2");
if(iRadioButton==IDC_RADIO3)
MessageBox("Click Button3");
其他说明:
Radio Button 成组使用时,只需保证在添加控件时资源号连续,并且第一个 Radio Button 的属性中 Group 被选中即可.
这样就可以给这一组控件添加成员变量使用
例:
1.建立一个基于对话框的应用程序,添加三个 Radio Button,和一个 Button
选中第一个 Radio Button 属性中的 Group
2.在 Button 的 Click 事件中添加代码:
UpdateData(TRUE);
if(m_radio==0)
MessageBox("0");
if(m_radio==1)
MessageBox("1");
if (m_radio==2)