Date<2007,11,7-11,8>
MFC学习笔记一
《VC时尚编程百例》(Chapter 1-Chapter 20)
《VC时尚编程百例》(Chapter 1-Chapter 20)
chaptet 9 KeyBoard
1. Windows 为每次按键发送3条消息。WM_KEYDOWN,WM_CHAR,,WM_KEYUP, 在KEYDOWN种处理具有非打印键的消息。而VM_CHAR中处理可打印字符消息。
2. 键盘的输入是从扫描码开始的。windows键盘驱动程序将这些代码转换成硬件无关形式,既虚拟码。一般情况下,Windows然后将虚拟键码消息发送到一Windows API 函数::TranslateMessage() ,该函数将虚拟码消息转换WM_CHARX 消息,MFC封装了此消息。
3. Qustion:键码KeyDown KeyUp 操作。(查MSDN)
chapter10 ScrollBar
1. 使用 CSrollView 类实现滚动窗口。
2.CScrollView类图
CScrollView
CObject
|
-----cCmdTargert
|
-----CWnd
|
-------CView
|
------CSrollView
3.函数内容
void FillOutsideRect(CDC* pDC,CBrush* pBrush);
CPoint GetDeviceScrollPosition() const
void GetDeviceScrollSize(int & nMapMode,SIZE & sizeTotal,SIZE & sizePage,SIZE& sizeLine)const;
CPoint GetScrollPosition()const;
CSize GetTotalSize()const;
void ResizeParentToFit(BOOL bShrinkOnly=TRUE);
voide SetScaleToPosition(POINT pt);
void SetScaleToFitSize)SIZE sizeTotal);
void SetScrollSizes(int nMapMode,SIZE sizeTotal,const SIZE& sizePage=sizeDefault,const SIZE& sizeLine=sizeDefault);
4.实现code
void CSrollView10View::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
CSize sizeTotal;
// TODO: calculate the total size of this view
sizeTotal.cx = sizeTotal.cy = 300; //modfiy bu hunk
SetScrollSizes(MM_TEXT, sizeTotal);
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
}
chapter 11 Dialog
1. 画好Dialog双击 该Dialog 建立该Dialog上的一个类。
2. 调用类里调用函数中声明刚刚定义的类创建一个对象 使用 DoModal()显示对话框!
注意在调用类的头文件里需要加上include “dialogname.h”;
chapter 12 非模式Dialog
1. 对话框分2种模式对话框和非模式。(前者出现必须操作完才会主程式。后者可以同时存在)。
2. 非模式对话框相关函数:
BOOL Create(LPCTSTR lpszTempleteName,CWnd* pParentWnd=NULL)
ShowWindow(SW_RESTORE);
BOOL Create(LPCTSTR lpszTempleteName,CWnd* pParentWnd=NULL)
ShowWindow(SW_RESTORE);
3. dlg=new Dlg(this);
4. dlg->Create(IDD_DIALOG1);
5. dlg->ShowWindow(SW_RESTORE);
chapter 13 CRent类
1. 处理窗口最常用的类。如处理大小颜色以及剪切板
CRect类定义
class CRect
{
LONG LEFT:
LONG RIGHT;
LONG TOP;
LONG BOTTOM;
}RECT;
}RECT;
.GetClientRect(&rect);获得窗口大小
2. pDC->FillSolidRect(r,RED);
3. #define RED RGB(255,0,0)
chapter 14 限制鼠标范围。
1. 相关函数:
GetClientRect(&r);
ClientToScreen(&r);
ClipCursor(&r);
GetClientRect(&r);
ClientToScreen(&r);
ClipCursor(&r);
2. GetClientRect(&rect);
3. ClientToScreen(&rect);
4. ClipCursor(rect);
5. ClipCursor(NULL);
Chapter 15 对话框应用程序
1. 使用App Wizard 创建第一步选择 “基于对话框”。
Chapter16 字体应用程序
1. CFont 类
是 CgdiObject类的派生类,它封装了windows的字体实体(以句柄标识)。
是 CgdiObject类的派生类,它封装了windows的字体实体(以句柄标识)。
2. CreateFont()函数
BOOL CreateFont( int nHeight, //字体高度
BOOL CreateFont( int nHeight, //字体高度
int nWidth
//字体平均宽度
int nEscapement //文本行角度
int nOrientation //字符的角度
int nWeight
//字符的粗细度
Byte bItalic
//倾斜
Byte bUnderline,
//下划线
Byte cStrikeOut,
//删除线
Byte nCharSet,
//字符集
Byte nOutPrecision // 字体输出结果和要求的匹配程度
Byte nClipPrecision //如何裁剪落于裁剪区之外的字符
Byte nQuality , //字体属性匹配的精确度。
Byte nPitchAndFamily ,//字体间距和字体族
LPCTESTR lpszFacename.//字体名称
)
注: 字体高度可以是正数负数和 0 0表示默认
字体的粗细可以在 0-1000的整数系统以定义了一些常量。如FW_THIN是细体,FW_NORMAL,FW_BOLD;
3.主要代码:
CFont font;
cHeight=16+x*8;
font.CreateFont(cHeight,0,0,0,FW_NORMAL,FALSE,FALSE,FALSE,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY, DEFAULT_PITCH,"Times New Roman");
CFont *oldfont=pDC->SelectObject(&font); //设置系统字体
position+=cHeight;
pDC->TextOut(20,position,"字体测试");
pDC->SelectObject(oldfont); //还原设置系统字体
Chapter17 动态菜单
1. CMenu类
获取菜单位置CMenu* GetSubMenu(int nPos); const;
添加菜单项 BOOL AppendMenu(UINT nFlags,UINT nIDNewItem=0,LPCSTR ltspNewItem=NULL);
删除位于Postion的菜单项目
获取菜单位置CMenu* GetSubMenu(int nPos); const;
添加菜单项 BOOL AppendMenu(UINT nFlags,UINT nIDNewItem=0,LPCSTR ltspNewItem=NULL);
删除位于Postion的菜单项目
Delete Remove(UINT nPostion,UINT nFlags)
2. 主要代码
CMenu *pAddingMenu,*pTopMenu;
CMenu *pAddingMenu,*pTopMenu;
pTopMenu=AfxGetMainWnd()->GetMenu();
pAddingMenu=pTopMenu->GetSubMenu(1);
ASSERT(pAddingMenu!=NULL);
pAddingMenu->AppendMenu(MF_SEPARATOR);
CString MenuName;
for(int i=0;i<2;i++)
{
MenuName.LoadString(IDS_Red+i);
pAddingMenu->AppendMenu(MF_STRING,IDS_Red+i,MenuName);
}
2. 进一步:
如果需要加入动态加入的菜单项的响应函数。只需要添加函数。在BEGIN_MESSAGE_MAP种加入 MAP 就可以了。
如 :ON_COMMAND(IDS_Red, OnOpenColor) 意思为当点击 了 IDS_RED 后调用OnOpenColor()函数。
Chapter19 实现序列化
// CSerialized19Doc serialization
void CSerialized19Doc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: add storing code here
ar<<StrName;
}
else
{
// TODO: add loading code here
ar>>StrName;
}
}