日记总结Word格式文档下载.docx

上传人:b****4 文档编号:7373979 上传时间:2023-05-08 格式:DOCX 页数:20 大小:30.40KB
下载 相关 举报
日记总结Word格式文档下载.docx_第1页
第1页 / 共20页
日记总结Word格式文档下载.docx_第2页
第2页 / 共20页
日记总结Word格式文档下载.docx_第3页
第3页 / 共20页
日记总结Word格式文档下载.docx_第4页
第4页 / 共20页
日记总结Word格式文档下载.docx_第5页
第5页 / 共20页
日记总结Word格式文档下载.docx_第6页
第6页 / 共20页
日记总结Word格式文档下载.docx_第7页
第7页 / 共20页
日记总结Word格式文档下载.docx_第8页
第8页 / 共20页
日记总结Word格式文档下载.docx_第9页
第9页 / 共20页
日记总结Word格式文档下载.docx_第10页
第10页 / 共20页
日记总结Word格式文档下载.docx_第11页
第11页 / 共20页
日记总结Word格式文档下载.docx_第12页
第12页 / 共20页
日记总结Word格式文档下载.docx_第13页
第13页 / 共20页
日记总结Word格式文档下载.docx_第14页
第14页 / 共20页
日记总结Word格式文档下载.docx_第15页
第15页 / 共20页
日记总结Word格式文档下载.docx_第16页
第16页 / 共20页
日记总结Word格式文档下载.docx_第17页
第17页 / 共20页
日记总结Word格式文档下载.docx_第18页
第18页 / 共20页
日记总结Word格式文档下载.docx_第19页
第19页 / 共20页
日记总结Word格式文档下载.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

日记总结Word格式文档下载.docx

《日记总结Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《日记总结Word格式文档下载.docx(20页珍藏版)》请在冰点文库上搜索。

日记总结Word格式文档下载.docx

在win32程序中,关于消息有两种传递方式:

a.MFC消息,MFC会把所有的消息一条条放到一个AFX_MSGMAP_ENTRY结构中,形成一个数组,该数组存放了所有的消息和与它们相关的参数。

也可以说是放到消息队列里去。

b.采用SendMessage()或其他类似的方式向窗口直接发送的而不经过消息队列的消息。

这两种方式中只有第一种(穿过消息队列的消息)才受PreTranslateMessage()影响,

第二种消息并不会理睬PreTranslateMessage()的存在。

一、是否调用TranslateMessage()和DispatchMessage()是由一个名称为PreTranslateMessage()函数的返回值决定的,如果该函数返回TRUE,则不会把该消息分发给窗口函数处理。

二、传给PreTranslateMessage()的消息是未经翻译过的消息,它没有经过TranslateMessage()处理。

可以在该函数中使用(pMsg->

wParam==VK_RETURN)来拦截回车键。

三、在WindowProc里不能处理WM_Char消息。

(WindowProc函数见MFC消息响应机制一文)

四、SetWindowText会发送WM_Char给窗口。

五、PeekMessage和GetMessage的区别:

GetMessage在没有消息的时候等待消息,cpu当然低

PeekMessage没有消息的时候立刻返回,所以cpu占用率高。

因为游戏不能靠windows消息驱动,所以要用PeekMessage();

另一篇文章中:

在一个WIN32程序中,WINDOWS会将消息传递给相应的窗口。

但是消息不是立即就被传递给相应的窗口,而是会从整个程序最顶层的窗口传递到下一级窗口,再传递到下一级窗口,直到传递给目标窗口。

在整个过程中,有些消息,在某些特定的情况下,无法默认传递到目标窗口的。

比如用户在EDIT控件中按下回车键,CANCEL键等,如果EDIT窗口之前有对话框窗口,对话框会默认处理回车消息(即响应ONOK函数,然后关闭对话框),然后退出消息传递。

所以EDIT会收不到。

要解决这个问题,可以在EDIT窗口之前所有的对话框中重载PreTranslateMessage函数,然后在函数内加上:

if(pMsg->

message==WM_KEYDOWN&

&

pMsg->

wParam==VK_RETURN)//如果消息类型为WM_KEYDOWN并且用户按下的是回车

returnFALSE;

//不翻译消息,直接将消息传递下去。

具体可查MSDN。

注意,这里返回值不能为TRUE,TRUE的意思是翻译消息后退出消息传递,如此一来虽然也能避开对话框默认处理,但是会退出消息传递,这样EDIT控件照样得不到消息。

如此,就可避开对话框默认处理,将消息传递下去。

注意:

只有对话框才会默认处理按下回车,CANCEL消息,其他控件窗口则不会,所以在其他窗口中不必重载PreTranslateMessage函数,当然如果重载了也不会错。

附:

关于PreTranslateMessage()函数的小程序示例:

BOOLCSearchuserDlg:

PreTranslateMessage(MSG*pMsg)

{

if(pMsg->

message==WM_KEYDOWN)//判断是否有按键按下

{

switch(pMsg->

wParam)

caseVK_DOWN:

//表示是方向键中的向下的键

//addhandlecodehere

break;

caseVK_UP:

//表示是方向键中的向上的键

default:

}

}

1.GetModuleFileName函数可以获得当前运行程序的路径,PathRemoveFileSpec去掉路径名称的安装文件后的路径名称。

constintsize=256;

GetModuleFileName(NULL,str.GetBufferSetLength(size+1),size);

str.ReleaseBuffer();

2.获取当前运行程序的版本信息:

GetFileVersionInfoSize获得文件句柄,GetFileVersionInfo获得获得存放信息的数组大小,VerQueryValue获得版本的版本号信息,语言信息,

m_dwDataSize=0;

m_dwLangCharset=0;

m_pFixedFileInfo=NULL;

memset(m_cbInfoBuffer,0,sizeof(m_cbInfoBuffer));

//Openthefile

DWORDdwFileHandle=NULL;

DWORDdwBufferSize=:

GetFileVersionInfoSize((LPTSTR)lpszFileName,&

dwFileHandle);

if((dwBufferSize==0)||(dwBufferSize>

sizeof(m_cbInfoBuffer)))returnFALSE;

//theinformationoffile

m_dwDataSize=dwBufferSize;

if(:

GetFileVersionInfo(lpszFileName,dwFileHandle,sizeof(m_cbInfoBuffer),m_cbInfoBuffer)==FALSE)returnFALSE;

//theinformationoflanguage

UINTuQuerySize=0;

DWORD*pTransTable=NULL;

BOOLbSuccess=:

VerQueryValue(m_cbInfoBuffer,TEXT("

\VarFileInfo\Translation"

),(LPVOID*)&

pTransTable,&

uQuerySize);

if(bSuccess)m_dwLangCharset=MAKELONG(HIWORD(pTransTable[0]),LOWORD(pTransTable[0]));

//版本信息

if(:

\\"

),(void**)&

m_pFixedFileInfo,&

uQuerySize)==FALSE)returnfalse;

if((uQuerySize!

=sizeof(VS_FIXEDFILEINFO))||(m_pFixedFileInfo==NULL))returnfalse;

returntrue;

3.GetPrivateProfileString读取.ini文件中的字符串,GetPrivateProfileInt读取.ini中整型数据

GetPrivateProfileString("

UPDATEDATA"

"

DataUrl"

NULL,s.GetBuffer(100),100,"

..\\serverinfo.ini"

);

WritePrivateProfileString

参数表

  lpApplicationName-String,要在其中写入新字串的小节名称。

这个字串不区分大小写。

  lpKeyName------Any,要设置的项名或条目名。

用vbNullString可删除这个小节的所有设置项。

  lpString-------String,指定为这个项写入的字串值。

用vbNullString表示删除这个项现有的字串。

  lpFileName-----String,初始化文件的名字。

如果没有指定完整路径名,则windows会在windows目录查找文件。

如果文件没有找到,则函数会创建它。

编辑本段

函数在VC中的使用

  在我们写的程序当中,总有一些配置信息需要保存下来,以便完成程序的功能,最简单的办法就是将这些信息写入INI文件中,程序初始化时再读入.具体应用如下:

  一.将信息写入.INI文件中

  1.所用的WINAPI函数原型为:

  BOOLWritePrivateProfileString(

  LPCTSTRlpAppName,

  LPCTSTRlpKeyName,

  LPCTSTRlpString,

  LPCTSTRlpFileName

  );

  其中各参数的意义

  LPCTSTRlpAppName是INI文件中的一个字段名.

  LPCTSTRlpKeyName是lpAppName下的一个键名,通俗讲就是变量名.

  LPCTSTRlpString是键值,也就是变量的值,不过必须为LPCTSTR型或CString型的.

  LPCTSTRlpFileName是完整的INI文件名.

  2.具体使用方法:

设现有一名学生,需把他的姓名和年龄写入c:

\stud\student.ini文件中.

  CStringstrName,strTemp;

  intnAge;

  strName="

张三"

;

  nAge=12;

  :

WritePrivateProfileString("

StudentInfo"

Name"

strName,"

c:

\\stud\\student.ini"

  此时c:

\stud\student.ini文件中的内容如下:

  [StudentInfo]

  Name=张三

  3.要将学生的年龄保存下来,只需将整型的值变为字符型即可:

  strTemp.format("

%d"

nAge);

Age"

strTemp,"

  二.将信息从INI文件中读入程序中的变量

  DWORDGetPrivateProfileString(

  LPCTSTRlpDefault,

  LPTSTRlpReturnedString,

  DWORDnSize,

  前二个参数与WritePrivateProfileString中的意义一样.

  lpDefault:

如果INI文件中没有前两个参数指定的字段名或键名,则将此值赋给变量.

  lpReturnedString:

接收INI文件中的值的CString对象,即目的缓存器.

  nSize:

目的缓存器的大小.

  lpFileName:

是完整的INI文件名.

现要将上一步中写入的学生的信息读入程序中.

  CStringstrStudName;

  intnStudAge;

  GetPrivateProfileString("

默认姓名"

strStudName.GetBuffer(MAX_PATH),MAX_PATH,"

  执行后strStudName的值为:

"

若前两个参数有误,其值为:

.

  注意:

如果在读入的ini文件不存在,则按默认值生成相应的ini文件

  3.读入整型值要用另一个WINAPI函数:

  UINTGetPrivateProfileInt(

  INTnDefault,

  这里的参数意义与上相同.使用方法如下:

  nStudAge=GetPrivateProfileInt("

10,"

  三.循环写入多个值,设现有一程序,要将最近使用的几个文件名保存下来,具体程序如下:

  1.写入:

  CStringstrTemp,strTempA;

  inti;

  intnCount=6;

  文件:

//共有6个文件名需要保存

  for(i=0;

i{strTemp.format("

i);

  strTempA=文件名;

//文件名可以从数组,列表框等处取得.

UseFileName"

FileName"

+strTemp,strTempA,

  "

\\usefile\\usefile.ini"

  }

nCount);

FileCount"

Count"

//将文件总数写入,以便读出.

  2.读出:

  nCount=:

GetPrivateProfileInt("

0,"

  strTemp="

+strTemp;

CurrentIni"

default.fil"

strTempA.GetBuffer(MAX_PATH),MAX_PATH,"

//使用strTempA中的内容.

补充信息

  补充四点:

  1.INI文件的路径必须完整,文件名前面的各级目录必须存在,否则写入不成功,该函数返回FALSE值.

  2.文件名的路径中必须为\\,因为在VC++中,\\才表示一个\.

  3.也可将INI文件放在程序所在目录,此时lpFileName参数为:

"

.\\student.ini"

  4.从网页中粘贴源代码时,最好先粘贴至记事本中,再往VC中粘贴,否则易造成编译错误,开始时我也十分不解,好好的代码怎么就不对呢?

后来才找到这个方法.还有一些代码中使用了全角字符如:

<,\等,也会造成编译错误

ShellExecute函数可以调用网站,安装文件等如

ShellExecute(AfxGetApp()->

GetMainWnd()->

m_hWnd,"

open"

..\\LEO.exe"

NULL,NULL,SW_SHOWNORMAL);

CMainFrame*pWnd=(CMainFrame*)AfxGetApp()->

m_pMainWnd;

CCInetView*pView=(CCInetView*)pWnd->

GetActiveView();

获得视图指针,通过指针即可获得视图里的各种变量和成员函数.

TCHAR与Cstring的比较

在程序中,TCHAR与TCHAR之间是不可以直接判断是否是横等于的“==”,只有转换成Cstring类型的字符串才可以进行比较相等或者不相等等的情况。

同样,Cstring与TCHAR之间也是不可以直接比较的,必须进行转换成Cstring的字符串才可以进行比较判断,而他们之间的转换只需用到成员函数Format函数就可以实现。

Cstring有个成员函数GetBuffer(),如果用了此成员函数,想操作此字符串,必须用ReleaseBuffer()来释放

对数据初始化,memcpy

对结构体通常采用的是ZeroMemory这个函数进行初始化的,如ZeroMemory(&

filehead,sizeof(filehead));

其中filehead是结构体的实例。

memset就是将一个内存区全部设置成你指定的值。

以字节为单位。

ZeroMemory相当于memset(buffer,0,length)中参数2设置成0。

2.memset有个潜在的危险,它的后两个参数类型相同,但是含义大相径庭,如果不慎写反了编译时也不容易查出来;

相比起源于Berkerly网络编程代码早期的bezro不是ANSIC函数,但它的两个参数更容易记忆。

在windows平台下,对于数组或纯结构使用ZeroMemory是安全的,对于类,则使用构造函数,不要调用ZeroMemory。

3.ZeroMemory是微软的SDK提供的,

memset属于CRun-timeLibrary,

所以ZeroMemory只能用于Windows系统,memset可用于别的系统。

ZeroMemory是一个宏,只是用于把一段内存的内容置零,内部是用memset实现的,memset可将内存置成别的字符。

如果你的程序是Win32程序而且不想连接c运行时库,那就用ZeroMemory,如果需要跨平台,那就用memset

memcpy可以对字符串进行安字节存入,读取,里面可以存进去结构体啥的

如:

charbuff[1024];

//cmd,find均为结构体

memcpy(buff,&

cmd,sizeof(cmd));

memcpy(&

buff[sizeof(cmd)],&

find,sizeof(find));

lstrcpyn也可以进行数据字符串的copy功能,但是有时候会丢失数据

//cun,m_TagInternet均为结构体

lstrcpyn(cun.GameName,m_TagInternet[m_DoCount].GameName,sizeof(cun.GameName));

1.创建:

可以动态创建也可以在对话框内直接拉出来使用,如果想实现扩展的属性可以运用他的成员函数SetExtendedStyle来完成,LVS_EX_FULLROWSELECT是一下子可以选定一行LVS_EX_GRIDLINES使列表有网格的特征。

2.添加列,行。

添加列可以用成员函数InsertColumn来添加,而行必须用InsertItem来加入第一行的内容,然后再用SetItemText函数来完成行和列的加载工作如

for(inti=0;

i<

usercount;

i++)

ZeroMemory(&

userhead,sizeof(userhead));

userhead=m_user.GetAt(i);

string.Format("

%s"

userhead.szAccounts);

m_dataList->

InsertItem(i,string);

userhead.szNickName);

SetItemText(i,1,string);

3.加图象:

首先要CimageList来加载图片,然后再显示出来。

使菜单不可用

对于菜单,如果想控制他的可用与不可用必须先把m_bAutoMenuEnable设置成FALSE,否则不会其作用

DDX_Control(ID,cwnd);

一个控件ID,一个要关联的变量,这样就和一个类绑定起来了.

DoDataExchange(CdataExchange*pDX);

函数里实现控件对类的绑定。

他是个虚函数

按钮自绘的功能使用一个类如CmyButton从CButton里派生出来,用一个虚函数virtualvoidDrawItem(LPDRAWITEMSTRUCTlpDrawItemStruct)函数来实现绘制自己需要的按钮,在绘制过程中还可以根据位图形状进行绘制成位图形状的按钮。

A.鼠标操作

在派生类里可以实现鼠标移动到按钮,离开按钮,按下按钮等操作,WM_MOUSEMOVE,WM_LBUTTONDOWN,WM_LBUTTONDOANUP是MFC类里封装好的系统消息,但是WM_

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 节日庆典

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2