随手笔记之VC++(三)

来源:互联网 发布:有可靠的网络兼职吗 编辑:程序博客网 时间:2024/04/30 14:24

文本编程:

1. 创建文本插入符:

Void CreateSolidCarent(int nWidth, int nHeight);

如果 都为0,。那么使用系统定义的

创建之后还必须要使用 ShowCarent();来显示

其实一般都是根据文本的字体的高度和宽度来取定插入符比较好,调用CDC类的 GetTextMetrics成员函数可以得到设备描述表中当前字体的度量信息。

  BOOL GetTextMetrics( LPTEXTMETRICS  lpMetrics) const;

CClientDC dc(this );

TEXTMETRICS  tm;

dc. GetTextMetrics( & tm);

CreateSolidCarent(tm.tmAveCharWidth/8, tm.tmHeight);

ShowCarent();

2. 创建图形插入符:

     Void CreateCarent(CBitmap *pBitmap);

CBitmap bitmap;

bitmap.loadBitmap(ID);

CreateCarent(&bitmap);

ShowCarent();

上面的会有问题,因为是局部变量,所以要在视类中添加一个私有成员变量。

3. 窗口重绘

OnDraw() 函数中。

4. 路径

CSize GetTextExtent(const CString &str) const; 这个函数是获得一串字符的宽度和高度,返回的是一个CSize 类 类中由两个成员变量。

CString str;

Str = “VC++ 编程”;

pDC->TextOut( 50,50,str);

CSize sz = pDC->GetTextExtent(str);

Str.LoadString(ID);

pDC->TextOut(0,200,str);

pDC->BeginPath();

pDC->Rectangle(50,50, 50+sz.cx, sz.cy);

pDC->EndPath();

pDC->SelectClipPath();  // 这个函数是把当前设置的路劲层和设备描述表中已有的裁剪区域按照一定的模式进行互操作,RGN_DIFF 这个是包含了裁剪区域,就是当前的区域不会被覆盖,RGN_AND 这个是交集,就是只有当前的区域被覆盖了。

5. 字符输入

Static void PASCAL SetCaretPos(Point point);  // 设定插入符的位置 一般在鼠标左键按下去后设定。

6. 字体

MFC 提供了一个CFont专门用来设置字体的。这个类派生于CGdiObject类,封装了一个Windows 图形设备接口(GDI)的字体,与其他的GDI对象一样,创建了之后要把它选入设备描述表中去,这个新字体才能发挥作用,

CClientDC dc(this);

CFont font;

font.CreatePointFont(300,”行楷”,NULL);

CFont *pOldFont = dc.SelectObject(& font);

dc.SelectObject(pOldFont);

7. 对话框

对话框的种类:模态对话框 和 非模态对话框。

模态对话框是只有关闭当前的窗口 才能执行其他的消息响应,而非模态就不用

模态对话框的创建:

  这里要知道一般对资源的操作通常是通过一个与资源相关的类来完成的。所以一般创建一个类与这个这个资源想关联。

1. 创建一个类与资源相关联。

2. 在想调用资源的地方添加响应的函数。

3. 在相应的函数里面定义这个资源相关类的对象,然后用对象调用有模对话框

Dlg.DoModal();

   非模态对话框的创建:

    Bool Create(ID, pParentWnd = NULL); NULL时候父窗口是主应用程序

 创建了非模态对话框后还要调用一个函数把它显示出来。

-------------------------------------------------------

CTestDlg dlg;

dlg.Create(IDD, this); // 这里是在视类中

dlg.ShowWindow(SW_SHOW);

-----------------------------------------------------

这种是错误的,因为是局部,模态之所以行是因为显示时候程序不执行,直到关闭它,非模态就不行,所以要么定义类的成员变量或者定义指针分配内存。

--------------------------------------------------------

CTestDlg *pdlg = new CTestDlg;

Pdlg->Create(IDD,this);

Pdlg->ShowWindow(SW_SHOW);

-------------------------------------------------------

这个其实还有点问题,指针是局部的,可以定义类的成员变量然后析构函数释放或者重载虚函数PostNcDestroy.

对于模态对话框和非模态来说。单击OK 按钮都会消失,但是模态对话框是真正的摧毁了,非模态对话框则是隐藏了。如果对于非模态对话框来说有一个ID值为IDOK,必须要重写基类的OnOK 这个虚函数,在重写函数中调用一个函数DestroyWindow();同样的IDCANCEL.