句柄类型
HWND 窗口句柄
HINSTANCE 当前程序的实例句柄
HCURSOR 光标句柄
HFONT
HPEN
HBRUSH 画刷句柄
HDC 设备环境句柄
HBITMAP 位图句柄
HICON 图标句柄
HMENU 文件句柄
2. 数据类型
3.
MFC中以CObject类为基类派生了CCMDTARGET类并在这里面封装了窗口函数,凡是希望处理windos消息的功能,均必须以这个类进行派生
CWnd类:窗口的外观以及响应消息类
CFrimeWnd 由CWnd派生,用这个类的成员函数创建主窗口
Cobject---CCMEDTARGET---cwinthead----cwinapp
CWinApp封装主函数,其中程序的主窗口对象在CWINsTREAD中定义。
文档类和视图类CVIEW CDOCUMEN类对象的指针,视图类通过这里获得数据
ondraw 处理消息,更新视图的显示。
OnInitialUpdate 对文档 的一些初始化工作
CdOcument 对数据进行存储管理,是视图类对象的容器,在这个类中定义
程序所需的数据成员以及对其操作的函数
在MFC程序中我们要做的事情:
1.重写CWINAPP派生类的initinstance函数,按自己的需要创建和显示窗口
2.在cdocument类里面声明所需的数据以及对数据进行操作的接口函数
3.在cviewlei里面编写处理消息的代码。如果需要用到文档类的数据,可以通过getdocument来获取文档对象,然后通过文档对象
对接口函数进行操作重绘窗口的代码
4.在cview类中的ondraw
虚函数的使用:
a、关于指针方法
1、指向基类对象的指针不能指向私有派生类
2、不能将指向派生类的对象指针指向基类的一个对象
3、指向基类对象的指针当其指向派生类对象的时候,只能利用它来直接访问派生类中直接从基类中继承的成员
b\使用虚函数可以在基类中继承把函数声明,虚函数可以在多个派生类中重新定义
mfc消息映射使用方法:
1、DECLARE_DYNCREATE( class_name ):
Use the DECLARE_DYNCREATE macro to enable objects of CObject-derived classes
to be created dynamically at run time.Use the DECLARE_DYNCREATE macro to enable
objects of CObject-derived classes to be created dynamically at run time.
The framework uses this ability to create new objects dynamically,
for example, when it reads an object from disk during serialization.
Document, view, and frame should support dynamic creation because
the framework needs to create them dynamically.
2、DECLARE_MESSAGE_MAP:
Each CCmdTarget-derived class in your program must provide a message map to handle messages.
Use the DECLARE_MESSAGE_MAP macro at the end of your class declaration. Then, in the .CPP
file that defines the member functions for the class, use the BEGIN_MESSAGE_MAP macro, macro
entries for each of your message-handler functions, and the END_MESSAGE_MAP macro.
/ example for DECLARE_MESSAGE_MAP
class CMyWnd : public CFrameWnd
{
// Member declarations
DECLARE_MESSAGE_MAP( )
};
BEGIN_MESSAGE_MAP( theClass, baseClass )
Use the BEGIN_MESSAGE_MAP macro to begin the definition of your message map.
END_MESSAGE_MAP( )
Use the END_MESSAGE_MAP macro to end the definition of your message map
// example for BEGIN_MESSAGE_MAP
3、BEGIN_MESSAGE_MAP( CMyWindow, CFrameWnd )
//{{AFX_MSG_MAP( CMyWindow )
ON_WM_PAINT()
ON_COMMAND( IDM_ABOUT, OnAbout )
//}}AFX_MSG_MAP
4、END_MESSAGE_MAP( )
类消息表的声明和实现
CRuntimeClas结构的类信息表
DECLARE_DYNCREATE声明类信息表
IMPLEMENT_DYNCREATE 实现类信息表和链表
GDI图形设备接口:DC PEN BRUSH FRONT BITMAP PALETTE
DC设备描述环境:虚拟的图形显示对象
DC和GDI封装成 --> CDC
CPainDC是CDC总最常用的一个类,代表应用程序的客户区,只能在CView类的Ondraw中使用
对应用程序窗口进行绘制的的所有代码必须在这个函数中。应用程序窗口每次创建以及刷新都会产生WM_PAINT
消息,系统接受到之后就会自动调用OnDRAW函数 函数的参数是CpaintDC类的指针,通过对指针的操作来实现绘图操作
CPen
CPen( int nPenStyle, int nWidth, COLORREF crColor );
CPen* SelectObject( CPen* pPen );
HGDIOBJ SelectObject(HDC hdc, HGDIOBJ hgdiobj );
selectstockobject()
使用的时候记着返回原先画笔的指针
CBRUSH
CBrush( COLORREF crColor );
CBrush( int nIndex, COLORREF crColor );
CBrush* SelectObject( CBrush* pBrush );返回原先的画刷指针
CRect( );
CRect( int l, int t, int r, int b );
CRect( const RECT& srcRect );
CRect( LPCRECT lpSrcRect );jingchang
CRect( POINT point, SIZE size );
CRect( POINT topLeft, POINT bottomRight );
SetROP2( int nDRAWMODE)使用绘图模板
textout(int x ,int y,const &CSTRING &STR);
settextcolor
gettextcolor
setbkcolor
getbkcolor//设置字体的背景颜色
settextcharacterextra()z 设置字体的间距
settextalign()设置对齐方式
cfont
CClientDC可以在ONDRAW以外的其他地方画图,例如在鼠标的响应函数里面
CMetaFileDC:经常重复显示的时候--->图元文件
图元文件在视图类的OnCreate中使用CMetaFileDC中的create函数创建,下面使用CDC来作图,最后用CLOSE来关闭并保存在HMETAFILE数据结构中。
在使用的时候可以使用函数PlayMetaFile(HMETAFILE)来显示,最后记着释放DELETEmetafile
鼠标的响应
在类里面添加windows 消息响应函数
这里重点提的是虽然变量或者数据的定义可以在程序里面的任何地方,但是呢,mfc本身的构架里面已经、
使用文档视图框架,这种框架把数据的显示以及存储分开,这样来提高程序的效率(?),
在编写程序的时候可以这样来使用
数据定义在文档类里面,在视图类里面通过getdocunmen来获得文档类的指针,通过指针来操作数据,
如果涉及到外部的一些响应,可以在响应里面更新数据,然后在ondraw里面对窗口进行更新
上面说得是客户区鼠标的响应
非客户区鼠标响应
windows不希望用户使用非客户消息,所以vc++没有提供非客户区鼠标的响应,如果要使用的话,需要用户自己在程序中、
添加消息映射宏以及消息响应函数,要在cmainframe里面加,而不是cview里面
鼠标消息的捕获:只要是避免当鼠标处于窗口之外的时候,该做的工作结束。
CWnd *SetCapture()
BOOL resealseCapture()
按键的响应和鼠标的响应类似
在多个窗口时候,一个时刻只有一个窗口处于活动状态,当按键输入的时候,具有输入焦点的窗口接受消息
当窗口获得焦点的时候,会发出WM_SETFOCUW,当窗口失去焦点的时候。发出WM_KILLFOCUS的消息
他们对应有响应函数
资源:例如菜单,图标,位图,光标等等。。。。。系统以文件的形式对资源进行描述和存储。。。
描述资源的文件叫做资源脚本文件、资源文件。。。在项目中一.rc后缀,对于图标保存在res文件夹中
资源头文件 resource.h
WriteFile
The WriteFile function writes data to a file and is designed for both synchronous and asynchronous operation.
The function starts writing data to the file at the position indicated by the file pointer.
After the write operation has been completed, the file pointer is adjusted by the number of bytes actually written,
except when the file is opened with FILE_FLAG_OVERLAPPED. If the file handle was created for overlapped input and output
(I/O), the application must adjust the position of the file pointer after the write operation is finished.
BOOL WriteFile(
HANDLE hFile, // handle to file to write to
LPCVOID lpBuffer, // pointer to data to write to file
DWORD nNumberOfBytesToWrite, // number of bytes to write
LPDWORD lpNumberOfBytesWritten, // pointer to number of bytes written
LPOVERLAPPED lpOverlapped // pointer to structure for overlapped I/O
);
CFILEDIALOG文件对话框,对文件的打开、存盘进行操作
CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL,
LPCTSTR lpszFileName = NULL,
DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL );
第一个参数:
文件打开---另存为
缺省文件扩展名
初始显示于文件名对话框中的文件命
定制对话框的类型
文件滤波器
指向文件父窗口或者拥有这的窗口
DoModal Displays the dialog box and allows the user to make a selection.
GetPathName Returns the full path of the selected file.
GetFileName Returns the filename of the selected file.
GetFileExt Returns the file extension of the selected file.
GetFileTitle Returns the title of the selected file.
GetNextPathName Returns the full path of the next selected file.
GetReadOnlyPref Returns the read-only status of the selected file.
GetStartPosition Returns the position of the first element of the filename list.
CreateFile:
The CreateFile function creates or opens the following objects and returns a handle that
can be used to access the object:
files
pipes
mailslots
communications resources
disk devices (Windows NT only)
consoles
directories (open only)
HANDLE CreateFile(
LPCTSTR lpFileName, // pointer to name of the file
DWORD dwDesiredAccess, // access (read-write) mode
DWORD dwShareMode, // share mode
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
// pointer to security attributes
DWORD dwCreationDisposition, // how to create
DWORD dwFlagsAndAttributes, // file attributes
HANDLE hTemplateFile // handle to file with attributes to
// copy
);
DeleteFile
The DeleteFile function deletes an existing file.
If an application attempts to delete a file that does not exist, the DeleteFile function fails.
BOOL WriteFile(
HANDLE hFile, // handle to file to write to
LPCVOID lpBuffer, // pointer to data to write to file
DWORD nNumberOfBytesToWrite, // number of bytes to write
LPDWORD lpNumberOfBytesWritten, // pointer to number of bytes written
LPOVERLAPPED lpOverlapped // pointer to structure for overlapped I/O
);
CString strMsg;
strMsg.Format("Snap shot %d images totally to memory ", 1);
MessageBox(strMsg, "Notice", MB_OK);
StretchDIBits
The StretchDIBits function copies the color data for a rectangle of pixels in
a device-independent bitmap (DIB) to the specified destination rectangle. If
the destination rectangle is larger than the source rectangle, this function
stretches the rows and columns of color data to fit the destination rectangle.
If the destination rectangle is smaller than the source rectangle, this function
compresses the rows and columns by using the specified raster operation.
在单文档视图结构里面的precreatewindow()函数,在创建窗口的前一刻被调用,这个函数可以
重载来对窗口的样式进行修改。它给出一个CREATESTRUCT结构变量,可以通过它来对窗口进行修改
在视图类中调用getdocument来获取文档类的指针,通过这个指针可以调用文档类的函数updateallviews()
这个函数来对所有的拆分视图进行更新。
更高效的对拆分窗口进行重绘
invalidatarect()这个函数第一个函数指定无效显示区,这个函数可以自动调用ondraw()函数对窗口进行
重绘
在使用pDoc->invalidatarect(Rect,FALSE)之后使用pDoc->UpdateAllViews(this)来更新其他的视图
对话框
模态对话框的使用:
int DOmodule() 这个还是函数首先载入对话框资源,然后调用oninitdialog()并在这个函数中调用Updatedata
用对话框成员变量来初始化对话框上面的控件。这个对话款会截获所有的消息,使应用程序主消息循环得不到
用户消息。
按下OK 或者CANCEL按钮后 如果ok就调用UPdateDATA来读取控件上的数据,并把他传递给对话框的成O员变量,然后
执行ENDDIALOG函数,如果按下CANCEL函数 直接关闭函数
文章评论(0条评论)
登录后参与讨论