C++学习笔记一

 

 

  Date<2007,11,7-11,8>

MFC学习笔记一
《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);
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;
.GetClientRect(&rect);获得窗口大小
2. pDC->FillSolidRect(r,RED);
3. #define RED RGB(255,0,0)
 
 
chapter 14 限制鼠标范围。
1. 相关函数:
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的字体实体(以句柄标识)。
2.       CreateFont()函数
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的菜单项目
Delete Remove(UINT nPostion,UINT nFlags)
 
2. 主要代码
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;
}
}
 
 
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值