`

MFC笔记

mfc 
阅读更多

1、当点击关闭按钮时确定是否退出
CLoginDlg Dlg;
int nRes=0;
do
{
nRes=Dlg.DoModal();
//回到主界面
if(nRes==IDOK)
return;
//退出系统
if(nRes==IDCANCEL)
{
if(AfxMessageBox("您确定要退出系统吗?",MB_OKCANCEL)==IDCANCEL)
{
return;
}
CFrameWnd::OnClose();
return;
}
}while(1);

if (IDYES==AfxMessageBox(L"你单击了一下\n是否退出?",MB_YESNO))
{
DestroyWindow();
}

if (IDCANCEL==AfxMessageBox(L"你单击了一下\n是否退出?",MB_OKCANCEL))
{
return;
}
else
DestroyWindow();//

2模态非模态对话框
CTestDlg dlg;//模态对话框
dlg.DoModal();
CTestDlg *pDlg = new CTestDlg();//非模态对话框
pDlg->Create(IDD_DIALOG1,this);
pDlg->ShowWindow(SW_SHOW);
}

3设置为全屏
放入OnInitDialog()中
int cx,cy;
cx = GetSystemMetrics(SM_CXSCREEN);
cy = GetSystemMetrics(SM_CYSCREEN);//设置为全屏并置顶
SetWindowPos(&wndTopMost,0,0,cx,cy,SWP_SHOWWINDOW);

4设置标题动态显示
整段代码放入MainFrame::OnCreate中并在MainFrame定义HICON m_hIcons[3];
m_hIcons[0]=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON1));
m_hIcons[1]=LoadIcon(theApp.m_hInstance,MAKEINTRESOURCE(IDI_ICON2));
m_hIcons[2]=LoadIcon(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDI_ICON3));//加载ICON图片

SetClassLong(m_hWnd,GCL_HICON,(LONG)m_hIcons[0]);

SetTimer(1,1000,NULL);//添加定时器 并添加WM_TIMER消息响应函数
在OnTimer中加入
static int index=1;
SetClassLong(m_hWnd,GCL_HICON,(LONG)m_hIcons[index]);
index=++index%3;

5文件的读取和写入
在View视图中
void CGraphicSingleView::OnFileOpen()//重写打开和保存
{
// TODO: 在此添加命令处理程序代码
HMETAFILE hm;
hm = GetMetaFile(L"meta.wmf");
m_dcMetaFile.PlayMetaFile(hm);
DeleteMetaFile(hm);
Invalidate();
}

void CGraphicSingleView::OnFileSave()
{
// TODO: 在此添加命令处理程序代码
HMETAFILE hm;
hm = m_dcMetaFile.Close();
CopyMetaFile(hm,L"meta.wmf");
DeleteMetaFile(hm);
}

void CGraphicSingleView::OnWrite()
{
// TODO: 在此添加命令处理程序代码

CFile file(L"luo.txt",CFile::modeCreate|CFile::modeWrite);
CArchive ar(&file,CArchive::store);
int i = 5;
char ch = 'a';
float f = 1.00f;
CString str("luozhenfei");
ar<<i<<ch<<f<<str;
}

void CGraphicSingleView::OnRead()
{
// TODO: 在此添加命令处理程序代码

CFile file(L"luo.txt",CFile::modeRead);
CArchive ar(&file,CArchive::load);
CString str,strResult;
int i;
float f;
char ch;
ar>>i>>ch>>f>>str;
strResult.Format(L"%d,%c,%f,%s",i,ch,f,str);
MessageBox(strResult);
}

6画图操作
在View中public:
定义变量
CPoint m_origin;
UINT m_nDrawType;
CPtrArray m_ptrArray;
void CGraphicSingleView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
m_origin = point;
CScrollView::OnLButtonDown(nFlags, point);
}

void CGraphicSingleView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CClientDC dc(this);
CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));//创建透明画刷
dc.SelectObject(pBrush);
//m_dcMetaFile.SelectObject(pBrush);
switch(m_nDrawType)
{
case 1:
dc.SetPixel(point,RGB(0,0,0));
//m_dcMetaFile.SetPixel(point,RGB(0,0,0));
break;
case 2:
dc.MoveTo(m_origin);
dc.LineTo(point);
// m_dcMetaFile.MoveTo(m_origin);
// m_dcMetaFile.LineTo(point);
break;
case 3:
dc.Rectangle(CRect(m_origin,point));
/*m_dcMetaFile.Rectangle(CRect(m_origin,point));*/
break;
case 4:
dc.Ellipse(CRect(m_origin,point));
/*m_dcMetaFile.Ellipse(CRect(m_origin,point));*/
break;
}
CGraph graph(m_nDrawType,m_origin,point);//窗口变化时图像消失
m_ptrArray.Add(&graph);
// CGraph *pGraph = new CGraph(m_nDrawType,m_origin,point);//窗口变化时图像不消失
// m_ptrArray.Add(pGraph);
CScrollView::OnLButtonUp(nFlags, point);
}

void CGraphicSingleView::OnPot()
{
// TODO: 在此添加命令处理程序代码
m_nDrawType = 1;
}

void CGraphicSingleView::OnLine()
{
// TODO: 在此添加命令处理程序代码
m_nDrawType = 2;
}

void CGraphicSingleView::OnRectangle()
{
// TODO: 在此添加命令处理程序代码
m_nDrawType = 3;
}

void CGraphicSingleView::OnEllipse()
{
// TODO: 在此添加命令处理程序代码
m_nDrawType = 4;
}

7对话框的收缩与扩展
在对话框类中添加按钮事件处理
void CTestDlg::OnBnClickedChenge()
{
// TODO: 在此添加控件通知处理程序代码
CString str;
if (GetDlgItemText(IDC_BUTTON2,str),str=="收缩<<")
{
SetDlgItemText(IDC_BUTTON2,L"扩展>>");
}
else
{
SetDlgItemText(IDC_BUTTON2,L"收缩<<");
}
static CRect rectLarge;
static CRect rectSmall;
if (rectLarge.IsRectNull())
{
CRect rectSeparater;
GetWindowRect(&rectLarge);
GetDlgItem(IDC_STATIC_PICTURE)->GetWindowRect(&rectSeparater);
rectSmall.left=rectLarge.left;
rectSmall.bottom=rectSeparater.bottom;
rectSmall.right=rectLarge.right;
rectSmall.top=rectLarge.top;
}
if (str=="收缩<<")
{
SetWindowPos(NULL,0,0,rectSmall.Width(),rectSmall.Height(),SWP_NOMOVE|SWP_NOZORDER);//分割窗口
}
else
{
SetWindowPos(NULL,0,0,rectLarge.Width(),rectLarge.Height(),SWP_NOMOVE|SWP_NOZORDER);//分割窗口
}
}

8访问控件
变量定义
CButton m_btn;
BOOL m_btnCreate;
public:
int m_num1;
public:
int m_num2;
public:
int m_num3;
public:
CEdit m_edit1;
public:
CEdit m_edit2;
public:
CEdit m_edit3;
void CTestDlg::OnBnClickedAdd()
{
// TODO: 在此添加控件通知处理程序代码

UpdateData(TRUE);//访问控件4
m_num3 = m_num1+m_num2;
UpdateData(FALSE);

}

9WM_ONCHAR消息函数
void CSingleMenuView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
/*CMenu menu;*/
CClientDC dc(this);
if(0x0d==nChar)
{
if (0==++m_nIndex)
{
m_menu.CreatePopupMenu();
GetParent()->GetMenu()->AppendMenu(MF_POPUP,(UINT)m_menu.m_hMenu,L"PhoneBook");
GetParent()->DrawMenuBar();
}
m_menu.AppendMenu(MF_STRING,ID_ABC_PHONE1+m_nIndex,m_strLine.Left(m_strLine.Find(' ')));
m_strArray.Add(m_strLine);
m_strLine.Empty();
Invalidate();
}
else
{
m_strLine+=(char)nChar;
dc.TextOut(0,0,m_strLine);
}
CView::OnChar(nChar, nRepCnt, nFlags);
}

10在单文档的View视图中显示图片
void CSingleMenuView::OnDraw(CDC* pDC)
{
CSingleMenuDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;

// TODO: 在此处为本机数据添加绘制代码
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP1);
BITMAP bmp;

CDC dc;
dc.CreateCompatibleDC(pDC);
dc.SelectObject(&bitmap);
CRect rect;
GetClientRect(&rect);
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dc,0,0,SRCCOPY);//不能缩放的显示
//pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dc,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);//能缩放的显示

CFont *pFont = pDC->SelectObject(&m_font);//更改字体
pDC->TextOut(0,0,m_strFont);
pDC->SelectObject(pFont);
}

11单文档中的文字编辑
void CSingleDocView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)//文本编辑
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CClientDC dc(this);

CFont ft;
ft.CreatePointFont(200,L"华文行楷",NULL);
CFont *pFont = dc.SelectObject(&ft);

TEXTMETRIC tm;
dc.GetTextMetrics(&tm);

if (0x0d == nChar)
{
m_strLine.Empty();
m_point.y+=tm.tmHeight;//按下回车键后纵坐标变化
}
else if (0x08==nChar)//退格
{
COLORREF color = dc.SetBkColor(dc.GetBkColor());
dc.TextOut(m_point.x,m_point.y,m_strLine);
m_strLine = m_strLine.Left(m_strLine.GetLength()-1);
dc.SetBkColor(color);
}
else
{
m_strLine+=(char)nChar;//接收键盘的输入
}

CSize sz = dc.GetTextExtent(m_strLine);
CPoint pt;
pt.x = m_point.x+sz.cx;
pt.y = m_point.y;
SetCaretPos(pt);

dc.TextOut(m_point.x,m_point.y,m_strLine);
dc.SelectObject(pFont);

CView::OnChar(nChar, nRepCnt, nFlags);
}

12 右键弹出菜单
void CSingleDocView::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CMenu menu;//创建右键弹出菜单
menu.LoadMenu(IDR_MENU1);//加载资源
CMenu *popMenu = menu.GetSubMenu(0);
ClientToScreen(&point);
popMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this);

CView::OnRButtonDown(nFlags, point);
}

13在View视图中显示网格
void CSingleDocView::OnDraw(CDC *pDC)
{
CSingleDocDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;

// TODO: 在此处为本机数据添加绘制代码
CString str("HelloWorld!!!");
pDC->TextOut(100,50,str);//显示文字

CSize sz = pDC->GetTextExtent(str);

str.LoadString(IDS_STRING59394);//显示String Table 中的ID中的文字
pDC->TextOut(200,50,str);

pDC->BeginPath();
pDC->Rectangle(100,50,100+sz.cx,50+sz.cy);//画矩形
pDC->EndPath();

pDC->SelectClipPath(RGN_DIFF);

for (int i=0;i<1500;i+=10)
{
pDC->MoveTo(0,i);//纵坐标变化
pDC->LineTo(1500,i);//画横线
pDC->MoveTo(i,0);//横坐标变化
pDC->LineTo(i,1000);//画竖线
}
}

14在View视图中显示变色的字
在MainFram::OnCreate中添加SetTimer(1,1000,NULL);//添加定时器
void CSingleDocView::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
m_Width+=5;
CClientDC dc(this);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
CRect rect;
rect.left=0;
rect.right=m_Width;
rect.top=200;
rect.bottom=rect.top+tm.tmHeight;

dc.SetTextColor(RGB(255,0,0));
CString str;
str.LoadString(IDS_STRING59394);
dc.DrawText(str,rect,DT_LEFT);

rect.left=150;
rect.bottom=rect.top+tm.tmHeight;
CSize sz = dc.GetTextExtent(str);
if (m_Width>sz.cx)
{
m_Width=0;
dc.SetTextColor(RGB(0,255,0));
dc.TextOut(0,200,str);
}
CView::OnTimer(nIDEvent);
}

15在状态栏显示鼠标坐标
void CStyleView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CString str;
str.Format("x=%d,y=%d",point.x,point.y);
//((CMainFrame*)GetParent())->m_wndStatusBar.SetWindowText(str);public:
//在MainFram中添加变量CStatusBar m_wndStatusBar;
//((CMainFrame*)GetParent())->SetMessageText(str);
//((CMainFrame*)GetParent())->GetMessageBar()->SetWindowText(str);
GetParent()->GetDescendantWindow(AFX_IDW_STATUS_BAR)->SetWindowText(str);

CView::OnMouseMove(nFlags, point);
}

16在状态栏显示时间
void CMainFrame::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
static int index=1;
SetClassLong(m_hWnd,GCL_HICON,(LONG)m_hIcons[index]);
index=++index%3;
CTime t=CTime::GetCurrentTime();
CString str=t.Format("%H:%M:%S");
CClientDC dc(this);
CSize sz=dc.GetTextExtent(str);
m_wndStatusBar.SetPaneInfo(1,IDS_TIMER,SBPS_NORMAL,sz.cx);
m_wndStatusBar.SetPaneText(1,str);

CFrameWnd::OnTimer(nIDEvent);
}

17添加属性表单
先在Dialog中添加属性对话框资源,并为每个属性对话框添加类从CPropertyPage继承
添加OnWizardNext OnWizardFinish OnSetActive消息处理函数

18树形控件
BOOL CTree::OnInitDialog()
{
CDialog::OnInitDialog();

// TODO: 在此添加额外的初始化
HTREEITEM InsertItemEx(HTREEITEM hParent, LPCTSTR lpszItem, UINT nIdBitmap = 0,
COLORREF crTransparent = RGB(255,255,255));HTREEITEM InsertItemEx(HTREEITEM hParent, LPCTSTR lpszItem, LPCTSTR lpszBitmap,
COLORREF crTransparent = RGB(255,255,255));

m_tree.SetItemHeight(20);//树形控件
HTREEITEM hRoot,hParent;

hRoot = m_tree.InsertItem(L"My Document");

hParent = m_tree.InsertItem(L"My eBook",hRoot);

m_tree.InsertItem(L"My BookCase",hParent);
m_tree.InsertItem(L"My Notes",hParent);

hParent = m_tree.InsertItem(L"Picture",hRoot);

m_tree.InsertItem(L"Picture Example",hParent);
m_tree.InsertItem(L"My Picture",hParent);

hRoot = m_tree.InsertItem(L"Computer");

m_tree.InsertItem(L"WIN7(C:)",hRoot);
m_tree.InsertItem(L"TOOLS(D:)",hRoot);
m_tree.InsertItem(L"FUN(E:)",hRoot);
m_tree.InsertItem(L"STUDYS(F:)",hRoot);

m_tree.InsertItem(L"回车站",0,1);
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}

19列表控件
BOOL CCtrDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// TODO: 在此添加额外的初始化

m_list.InsertColumn(0,L"图标",LVCFMT_RIGHT,100,-1);
m_list.InsertColumn(1,L"意义",LVCFMT_RIGHT,100,-1);
//创建图像列表
m_smallPicture.Create(IDB_BITMAP_SMALL,20,10,RGB(0x00,0x80,0x80));
m_largePicture.Create(IDB_BITMAP_LARGE,32,10,RGB(0x00,0x80,0x80));
//设置关联图像列表
m_list.SetImageList(&m_largePicture,LVSIL_NORMAL);
m_list.SetImageList(&m_smallPicture,LVSIL_SMALL);
CString tempstr;
CString drives[] = {L"Folder",L"文件夹",L"Open Folder",L"打开文件",L"3.5-Inch Floppy",L"3.5英寸盘",L"Hard Drive",L"硬盘",L"Network Drive",L"网络设备",L"CD-ROM",L"光驱",L"Audio CD",L"视频光盘"};
for (int i = 0;i<7;++i)
{
//插入表项
int nIndex = m_list.InsertItem(m_list.GetItemCount(),drives[2*i],i);
m_list.SetItemText(nIndex,1,drives[i*2+1]);
}
CheckRadioButton(IDC_RADIO1,IDC_RADIO4,IDC_RADIO4);

return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}

分享到:
评论

相关推荐

    MFC笔记 MFC笔记 MFC笔记 MFC笔记 MFC笔记 MFC笔记

    从给定的信息中,我们可以提炼出关于MFC(Microsoft Foundation Classes)的重要知识点,以及与之相关的C++编程、Visual Studio环境设置、Windows API使用、内存管理等关键概念。以下是对这些知识点的详细解释: ##...

    深入浅出MFC笔记 配合原书的好笔记 doc

    深入浅出MFC笔记主要讲解了如何利用MFC进行Windows应用开发,包括MFC的基本架构、对象模型以及AppWizard的使用。 首先,MFC应用通常从AppWizard开始创建,AppWizard会自动生成一系列文件,这些文件可以分为四类:...

    MFC笔记.doc(全)

    以下是对MFC笔记中提到的一些关键知识点的详细解释: 1. 访问控制:在C++中,类的成员变量通常声明为`private`以实现数据封装,而成员函数通常声明为`public`,以便外部代码可以调用。结构体的默认访问级别是`...

    VC++ MFC笔记资料整理.rar

    VC++视频笔记资料 一、MFC的概念和作用  1、什么是MFC? 全称:Microsoft Foundation Class Library(微软基础类库) 1-MFC从硬盘存在形式来说就是一个库(静态MFC库、动态MFC库) 2-MFC从原理来说...

    基于Vs2008+opencv2.3.1的MFC笔记本摄像头操作

    在本项目中,我们主要探讨如何使用Visual Studio 2008(Vs2008)结合OpenCV 2.3.1库来构建一个基于MFC(Microsoft Foundation Classes)的应用程序,以便操作笔记本摄像头并执行图像处理任务,如边缘检测。...

    C++、MFC学习笔记

    本篇笔记主要探讨C++和MFC中的一些核心概念和技术。 首先,我们看到`CDC * pDC = GetDC();`这行代码,`CDC`代表"设备上下文",它是MFC中用于图形绘制的对象。`GetDC()`函数用于获取窗口的设备上下文句柄,使得你...

    MFC 深入浅出 + 学习笔记

    文件`深入浅出MFC笔记(配合原书的好笔记).doc`可能是作者阅读侯捷的《深入浅出MFC》后所做的详细笔记,可能包含了对书中关键概念的理解、例子的解析以及个人的实践心得。这种学习方式对于巩固理论知识和提高实际编程...

    达内MFC笔记-MFC应用程序编程

    摘要:VC/C++源码,系统相关,MFC 达内MFC笔记系列,MFC应用程序编程,介绍MFC基础编程及示例应用程序展示,以及MFC中的类和MFC应用程序的启动等。其中MFC应用程序相关内容如下:  1 MFC的控制台程序  1.1 包含afx...

    深入浅出MFC学习笔记

    ### 深入浅出MFC学习笔记:关键知识点解析 #### 一、Windows消息机制与回调函数 在深入探讨MFC之前,我们先来理解Windows操作系统中的消息机制及其核心组成部分——回调函数。 ##### 1.1 Windows消息机制概述 ...

    VC++工具栏使用实例(达内MFC笔记源码)

    摘要:VC/C++源码,界面编程,工具栏 VC++工具栏使用实例是从达内MFC笔记中摘录出来的源码实例,具有初级代表性,适合初级的VC++入门者参阅。  本笔记的内容大概如下:一 工具栏的使用    1 MFC工具栏相关  ...

    深入浅出MFC读书笔记3

    深入浅出MFC读书笔记3 在MFC中,Document-View架构是一个非常重要的概念。本文将对Document-View架构中的关键组件进行深入探讨,并对其实现思路进行详细的解析。 首先,让我们来看一下Document的概念。在MFC中,...

    MFC+OpenCV实现的一个调用笔记本摄像头的监控实例。可保存截图和视频

    这是本人写的一个MFC代码,调用笔记本摄像头实现一个简单的监控。资源中已经包含了用到的OpenCV库,不需要另外下载。使用VS2008和OpenCV2.3.1。参考了位同仁的博客:...

    MFC实现的笔记本

    直接打开就可以用 清爽的界面风格 拥有自己的专属

    《精通MFC》笔记——自我感觉不比Visual C++深入详解逊色

    **精通MFC笔记** MFC(Microsoft Foundation Classes)是微软为Windows应用程序开发提供的一套类库,基于C++构建,它极大地简化了Windows API的使用,使得开发者能够更高效地编写Windows应用程序。《精通MFC》这...

    MFC笔记总结

    MFC入门笔记,适合菜鸟学习。常用的函数,最基本的操作,在这里你都可以找到。 笔记在手,入门无忧!

    达内MFC笔记-消息映射的教学例子

    摘要:VC/C++源码,界面编程,MFC 达内MFC笔记-消息映射,消息映射添加。1 消息映射添加  1.1 在FrameWnd添加消息宏定义   DECLARE_MESSAGE_MAP  1.2 添加消息宏实现  BEGIN_MESSAGE_MAP( theClass, parentClass ...

    MFC学习资料000

    "myMFC笔记"可能是一份详细的个人学习记录,涵盖了MFC的基础到高级概念,可能包括以下关键知识点: 1. MFC架构:MFC的核心是基于面向对象的设计,包括类库、消息映射机制、事件处理等部分。学习MFC首先要了解其整体...

    深入浅出MFC读书笔记2

    深入浅出MFC读书笔记2是对MFC框架的进一步学习和理解,主要涵盖了MFC的基础概念、类库结构以及程序构建的关键要素。MFC(Microsoft Foundation Classes)是微软为Windows平台开发的应用程序提供的一种类库,它基于...

    MFC笔记知识

    ### MFC基础知识详解 #### 一、MFC概述与核心组件 **MFC(Microsoft Foundation Classes)** 是一套由微软提供的面向对象的C++类库,用于简化Windows应用程序的开发。MFC基于Windows API,提供了丰富的类封装,...

    MFC联合Halcon 笔记本电脑摄像头读取二维码

    在本文中,我们将深入探讨如何使用MFC(Microsoft Foundation Class)库与Halcon机器视觉软件相结合,通过笔记本电脑的内置摄像头来读取和识别二维码。MFC是微软提供的一种C++类库,用于构建Windows应用程序,而...

Global site tag (gtag.js) - Google Analytics