C、C、MFC、汇编常用语法.doc_第1页
C、C、MFC、汇编常用语法.doc_第2页
C、C、MFC、汇编常用语法.doc_第3页
C、C、MFC、汇编常用语法.doc_第4页
C、C、MFC、汇编常用语法.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

笔记 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、移动和复制文件 一、C、C+、微机汇编1.1、文件读写:1.1.1 标准C头文件:#include 变量声明:FILE *fp;文件打开:if(fp0=fopen(E:sstudents_0001.yuv,rb)=NULL)printf(Open file1 E:s0001.yuv erron);elseprintf(Open file1 E:s0001.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 声明变量: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);将当前变量值输出到控件显示。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 ;指令运算过程xmm015.0 = xmm27.0(H):xmm07.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);elseMessageBox(_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);elseMessageBox(_T(没有选择要存储的文件);return;1.7、YUV与RGB互换公式YUV4:1:1 转RGB-24bitR= 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)+0R=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 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) MessageBox(2); UpdateData(false); 单选控件使用方法三1、对同一组的第一个Radio控件添加value变量,类型为int。如为 int m_RadioGroup1;在构造函数中初始化默认选中的Radio控件。-1为缺省值,即没有选中任何一个单选控件。2、调用UpdateData(TRUE)之后变量m_RadioGroup1机会根据选中的单选按钮作出相应的变化。0为选中组中第一个单选按钮。1为选中组中第二个单选按钮。依次类推。复选控件使用方法1、对要控制的复选控件的所有控件添加Control变量,类型为CButton类型,如有两个复选按钮,分别添加变量为 CButton m_Check1;CButton m_Check2;2、调用UpdateData(TRUE)之后,所添加的变量值会根据选中情况变化。1为该复选框被选中。0为未选中。1.10、BMP位图显示方法首先在头文件中定义:CString m_strpath; /文件路径int m_nWidth; /显示的宽度int m_nHeight; /显示的高度之后赋值:(如新建一个对话框用于图片文件选择和输入参数)COpen dlgopen;/显示图片选择和设定对话框,设定好后显示图片if(IDOK = dlgopen.DoModal()m_strpath = dlgopen.m_strPath;m_nHeight = dlgopen.m_Height;m_nWidth = dlgopen.m_Width;之后在void C*Dlg:OnPaint() 函数中(或其他函数)输入输入图片显示语句if( m_strpath != )m_nWidth = 176;m_nHeight =144; /手动输入显示图像的宽和高HDC desthdc = this -GetDC()-GetSafeHdc(); /定义一个设备上下文的句柄HBITMAP hbitmap;hbitmap = (HBITMAP)LoadImage(AfxGetInstanceHandle(),m_strpath,IMAGE_BITMAP, m_nWidth, m_nHeight, LR_LOADFROMFILE|LR_CREATEDIBSECTION);HDC srchdc = CreateCompatibleDC(desthdc);SelectObject(srchdc, (HGDIOBJ)hbitmap);BitBlt(desthdc, 320, 140, m_nWidth, m_nHeight, srchdc, 0, 0, SRCCOPY);DeleteDC(srchdc);DeleteDC(desthdc); /OnPaint()函数在对话框建立的时候会自动执行一遍,之后不再自动执行/其中BitBlt(desthdc, 0, 0,第一个0为显示起始位置的x坐标,/即距离工作区域最顶端的横向位置/第二个0 为y坐标。在需要显示图片的地方加入下列语句,以更新显示图片m_strpath = newfile; /给定图片路径及文件名RECT clientRect; /定义矩形区域变量。/以下代码重绘图片GetClientRect(&clientRect);/ 该函数获取窗口客户区的坐标。客户区坐标指定客户区的左上角/和右下角。由于客户区坐标是相对子窗口客户区的左上角而言的,因此左上角坐标为(0,0)/在Visual Studio 2005中,该函数的原型为 void GetWindowRect(LPRECT lpRect)InvalidateRect(&clientRect,TRUE);/ 该函数向指定的窗体添加一个无效矩形以用来更新该区域。/窗口客户的无效矩形所代表的区域必须会被重绘。也就时相当于重新调用了OnPaint()函数若要在对话框中显示图片可用下列方法:CDC* pdc = Center:GetDC(); /Center 为当前对话框的类。例如,主对话框为C*DlgCBitmap bitmap;CDC dcMemory;bitmap.LoadBitmap(BmpID); /BmpID为图片ID,也可以是图片文件的完整路径(包括文件名.bmp)dcMemory.CreateCompatibleDC(pdc);dcMemory.SelectObject(&bitmap);pdc-BitBlt(10,10,80,100,&dcMemory,0,0,SRCCOPY);1.11、截取Cstring中某一部分(举例) /m_strpath原串,ViewFile目的串。截取最后一个之后的部分:ViewFile = m_strpath.Right(m_strpath.GetLength()-m_strpath.ReverseFind()-1);/不包括斜杠说明:m_strpath.ReverseFind(char ch);/倒叙查找字符 ch 在m_strpath中从零开始的索引(下标),可以为字符串。m_strpath.GetLength();/得到串总长度m_strpath.Right(int n);/从最右端截取n个字符,返回Cstring类的类型。以下类推。截取最后一个之前的部分ViewFile = m_strpath.Left(m_strpath.ReverseFind()+1);截取第一个的之前(之后)的部分时,只需把ReverseFind改成Find即可。1.12 、格式化CString数据举例:OutPutString.Format(_T(图像已定位到(%d ,%d)位置处rn点击确定返回。),z,zy);这样如果z = 1000,zy = 100,则OutPutString就变成了_T(图像已定位到(1000 ,100)位置处rn点击确定返回。)其中所有格式控制符和转义字符均与printf的含义一样。1.13、CString数据写入到文件关于CString类型数据读写到文件时的注意:CString在写入到文件时会多写入一个32bit(4Byte)的串开始标识符,通常在记事本中显示为“”。用来判断一个CString对象的开始。而在读取时该标识符不会读到CString对象中。CString 的成员函数GetLength()得到的是字符串中包含的字符数,在使用Unicode编码时无论是什么字符都包含两个字节。所以在使用GetLength()函数作为字节偏移量时,要左移1位。CString数据写入到文件示例一:/文件原内容将被清除。UpdateData(TRUE);CString dstfilename;CFileDialog DlgbmpFile(FALSE,_T(txt),NULL,OFN_OVERWRITEPROMPT,_T(Text File(*.txt)|*.txt|),NULL);if(IDOK = DlgbmpFile.DoModal()dstfilename = DlgbmpFile.GetPathName(); /Cstring *UpdateData(FALSE);elseMessageBox(_T(没有选择要写入的文件);return;CFile fp;fp.Open(dstfilename,CFile:modeWrite|CFile:modeCreate);CArchive load(&fp,CArchive:store);loadsrc; /写入CString串到文件,src,src2为已有CString对象数据。loadsrc2;/追加写入Cstring数据到文件(写入第二个CString串)UpdateData(FALSE);load.Close();fp.Close();CString数据写入到文件示例二:/以追加方式写入。UpdateData(TRUE);CString dstfilename;CFileDialog DlgbmpFile(FALSE,_T(dk),NULL,OFN_OVERWRITEPROMPT,_T(Text File(*.dk)|*.dk|all file(*.*)|*.*|),NULL);if(IDOK = DlgbmpFile.DoModal()dstfilename = DlgbmpFile.GetPathName(); /Cstring *UpdateData(FALSE);elseMessageBox(_T(没有选择要写入的文件);return;CFile fp;fp.Open(dstfilename,CFile:modeWrite);fp.SeekToEnd(); /使fp指向文件结尾处,再进行串行化,即可实现追加存储。CArchive load(&fp,CArchive:store);CString srcEncode,srchelp;srcEncode = _T();for(int i=0;isrc.GetLength();i+)srchelp.Format(_T(%d),src.GetAt(i);srcEncode = srcEncode + srchelp;loadsrcEncode;load=j)break;loadArchivedst1;i = i+ (dst1.GetLength()dst2;i = i+ (dst2.GetLength()FillRect(rect,&brush);/填充绘图区域/pDC-Ellipse(rect);pDC-Ellipse(160,10,260,110);/画园(外圈)CRgn rgn;rgn.CreateEllipticRgn(161,11,260,110);pDC-FillRgn(&rgn,&brush);/填充颜色pDC-TextOut(120,120,绘制直径为100个像素的圆); /圆下方添加文字ReleaseDC(pDC);/释放CDC类的指针/ 画矩形CDC *pDC=GetDC();/使用GetDC()函数申请CDC类的指针CRect rect(100,0,300,200);/定义并申请一块矩形区域CBrush brush(RGB(180,180,180);/定义画刷/pDC-FillRect(rect,&brush);/填充绘图区域pDC-Rectangle(160,10,260,110);/画矩形pDC-TextOut(120,120,边长为100个像素的正方形); /添加文字ReleaseDC(pDC);/释放CDC类的指针1.16、 使按钮/菜单项失效和生效使用语句:GetDlgItem(IDC_BUTTON2)-EnableWindow(false);/使其失效GetDlgItem(IDC_BUTTON1)-EnableWindow(true);/使其生效菜单项:CMenu *m_CMenu; m_CMenu=GetMenu(); m_CMenu-EnableMenuItem(ID_ADDUSER,MF_BYCOMMAND|MF_GRAYED); m_CMenu-EnableMenuItem(ID_MODPASD,MF_BYCOMMAND|MF_GRAYED); m_CMenu-EnableMenuItem(ID_ADDUSER,MF_BYCOMMAND|MF_ENABLED); m_CMenu-EnableMenuItem(ID_MODPASD,MF_BYCOMMAND|MF_ENABLED); 1.17、 在EDIT控件中追加输出文本CEdit *pEdit = (CEdit*)GetDlgItem(IDC_EDIT4);/获取控件窗口指针pEdit-SetSel(0,-1); /选中全部文本int nStart,nEnd;pEdit-GetSel(nStart,nEnd); /获取当前选中文本的开始与结束位置pEdit-SetSel(nEnd,nEnd);/将插入符定位到最后一个字符结束处pEdit-ReplaceSel(str);/替换文本(即输出文本)1.18、判断MessageBox按下的按钮MessageBox(“”,”,MB_OKCANCEL);会返回一个int类型的值,这个值对应着不同的按钮。具体对应如下/* IDOK 1 The user chose the OK button. IDCANCEL 2 The user chose the Cancel button. IDABORT 3 The user chose the Abort button. IDRETRY 4 The user chose the Retry button. IDIGNORE 5 The user chose the Ignore button. IDYES 6 The user chose the Yes button. IDNO 7 The user chose the No button. */1.19、char *和CString相互转换char * 到CString 使用Format函数;CString到Char*:char* pstr= (LPSTR)(LPCTSTR)cstr;或者用语句:pstr = cstr.GetBuffer(cstr.GetLength()注意:上述CString到 Char * 的转换方法只使用与ANSI编码的,对Unicode编码的转换会失效。1.20、隐藏文件CFileStatus status;if(CFile:GetStatus(srcfilename,status) /如果成功获取文件属性BYTE m_s=status.m_attribute;CString m_string;status.m_attribute |= CFile:hidden;CFile:SetStatus(srcfilename,status);MessageBox(_T(文件:rn)+srcfilename+_T(rn已经隐藏);显示隐藏文件使用&= CFile:hidden;1.21、实现真彩色的按钮使用MFC基础控件: 一、插入图片到资源:如ID为(IDB_BMP),在这里可以插入256色、16位色或更高色的图片。二、为按钮添加一个变量,类型为:CBitmapButton(需要手动改)三、在初始化程序中加入如下代码: (CBitmapButton *)GetDlgItem(按钮的ID)-LoadBitmaps(按钮可用时显示图片的ID, 按钮可用时按下按钮的ID, 按钮不可用时显示图片的ID, 按钮不可用时按下按钮的ID); (CBitmapButton *)GetDlgItem(按钮的ID)-Invalidate(true); (CBitmapButton *)GetDlgItem(按钮的ID)-SizeToContent();四、设置按钮的属性-Styles-Owner draw为开.使用Activex控件:一、在窗本上单击鼠标右键选择Insert Activex Control二、在Activex Control 列表中选中 MicroSoft Forms 2.0 Image控件三、单击确定,在所插入的控件中单击鼠标右键来修改其属性(样式,图片,鼠标样式等)四、可以和Button控件一样为其添加消息函数,而且消息更加丰富。1.22、非模态对话框的创建与销毁创建:如在对话框A中某条消息处理中需要创建并显示非模态对话框B,则可在该消息映射函数中写入:CADlg:Function()pDialogB = new CResult(); /在函数体外部声明指针: CBDlg* pDialogB;pDialogB -Create(IDD_B,this); /显示对话框IDD_B为对话框B的IDpDialogB -ShowWindow(SW_SHOW);销毁:在对话框B的处理函数中加入销毁方式(在对话框退出时销毁自己)。首先需要添加WM_DESTROY消息映射,其处理函数函数体如下:void CBDlg:OnDestroy()CDialog:OnDestroy();delete this;/ TODO: Add your message handler code here 然后需要重载对话框B的CBDlg类的OnOK(),和OnCancel()函数void CBDlg:OnOK()CDialog:OnOK();DestroyWindow(); void CBDlg:OnCancel()CDialog:OnCancel();DestroyWindow(); 附:模态对话框创建与显示(不需要添加销毁机制):CBDlg dlgg; /创建对话框类实例dlgg.DoModal();/显示对话框1.23 移动和复制文件移动一个文件,一般可使用: BOOL WINAPI MoveFile(LPCSTR Existing, LPCSTR Target); 其中 Existing是现有文件或目录,Target是目标文件或目录。此函数还可以用来对文件改名。例: MoveFile(D:Tempa.txt, E:MyPathb.txt); 将D:Tempa.txt移动到E:MyPath并改名为b.txt API中的CopyFile: BOOL WINAPI CopyFile(LPCSTR oldFileName, LPCSTR newFileName, BOOL failIfExists); oldFileName: 原始文件名; newFileName: 目标文件名; failIfExists: 目标文件已存在时的处理办法。TRUE则不覆盖并返回失败标记,FALSE则覆盖。 oldFileName 和 newFileName 可以使用通配符来批量复制文件。其中XcopyFile可以复制包括子文件夹的内容。或者调用DOS的外部命令XCOPY WinExec(xcopy 参数1 参数2,SW_HIDE);/隐藏命令行窗口,其中参数为指定文件夹路径和名称返回值:TRUE代表成功,FALSE代表失败。 粘贴粘贴的功能不是一个函数能够实现的对剪贴板的操作Windows有一系列函数粘贴必须要用的是 OpenClipboard(), GetCipboardData()和CloseClipboard(). 拷贝粘贴的对象为文本或其他二进数据(如图像)时可能还要辅助其他的API. 附录AC-1 标准输出输入函数 FILE* fopen(const char* filename, const char* mode):使用mode模式开启参数filename的档案,传回档案串流,失败传回NULL。 FILE* freopen(const char* filename, const char* mode, FILE* stream):关闭档案后重新开启档案。 int fflush(FILE* stream):清除缓冲区的内容,成功传回0,失败传回EOF。 int fclose(FILE* stream):关闭档案。 int remove(const char* filename):删除参数的档案,失败传回非零值。 int rename(const char* oldname, const char* newname):将文件名称oldname改为newname,失败传回非零值。 FILE* tmpfile():建立wb+模式的临时文件,当结束程序后就会关闭且删除此档案。 char* tmpname(char sL_tmpnam):指定临时文件的名称为s。 int setvbuf(FILE* stream, char* buf

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论