这个笔记是在观看《孙鑫MFC教程》时写的,他用的是VC6.0,但是Win7和VC6.0 有不兼容的情况,我本人用VS2008来做的一些实例和练习。
窗口创建过程 | 1. 设计窗口类;2. 注册窗口类;3. 创建窗口;4. 显示及更新窗口 | |
以一个名称为Test的MFC程序 | 系统默认会产生:CAboutDlg(继承)、CMainFrame(继承CFrameWnd)、CTestApp(继承CWinApp)、CTestDoc(继承CDocument)、CTestView(继承CView)五个类 |
添加消息响应函数时,同时在三个地方加入了代码: | 1. 自己添加的消息响应函数代码2. 在相应的头文件,在 DECLARE_MESSAGE_MAP() 函数之前,会自动添加进去宏的声明3. 在相应的源文件,在BEGIN_MESSAGE_MAP(CDrawView, CView) END_MESSAGE_MAP()之间,也有相应的宏的声明 |
m_hWnd | 这是从MFC底层类库中派生来的数据成员,在类中可以直接使用。如: HDC hdc; hdc = ::GetDC(m_hWnd); ::ReleaseDC(m_hWnd, hdc); |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
对于DC(DeviceContext对象,用于画图,下面是一些代码)
// CDC *pDC = GetDC();
// pDC->MoveTo(m_ptOrigin);
// pDC->LineTo(m_ptEnd);
// ReleaseDC(pDC);
// CClientDC dc(this);
// dc.MoveTo(m_ptOrigin);
// dc.LineTo(m_ptEnd);
dc(GetDesktopWindow());
// dc.MoveTo(m_ptOrigin);
// dc.LineTo(m_ptEnd);
在一个自己建立的modal()类型的对话框上有3个便签和一个加按钮。且有3个整型数据关联。实现相加功能。
//int num1, num2, num3;
//CString str1, str2, str3;
//GetDlgItem(IDC_EDIT1)->GetWindowText(str1);
//GetDlgItem(IDC_EDIT2)->GetWindowText(str2);
//num1=_ttoi((LPCTSTR)str1);
//num2=_ttoi((LPCTSTR)str2);
//num3=num1+num2;
//_itot(num3,(TCHAR*)str3.GetBuffer(10),10);
//str3.ReleaseBuffer();
//GetDlgItem(IDC_EDIT3)->SetWindowText(str3);//当计算好num1+num2 显示在第三个编辑框控件中
//GetDlgItemText(IDC_EDIT1, str1);
//GetDlgItemText(IDC_EDIT2, str2);
//num1=_ttoi((LPCTSTR)str1);
//num2=_ttoi((LPCTSTR)str2);
//num3=num1+num2;
//_itot(num3,(TCHAR*)str3.GetBuffer(10),10);
//str3.ReleaseBuffer();
//SetDlgItemText(IDC_EDIT3, str3);
/*num1 = GetDlgItemInt(IDC_EDIT1);
num2 = GetDlgItemInt(IDC_EDIT2);
num3 = num1 + num2;
SetDlgItemInt(IDC_EDIT3, num3);*/
/*UpdateData();
m_num3 = m_num1 + m_num2;
UpdateData(false);*/
//m_edit1.GetWindowText(str1);
//m_edit2.GetWindowText(str2);
//num1=_ttoi((LPCTSTR)str1);
//num2=_ttoi((LPCTSTR)str2);
//num3=num1+num2;
//_itot(num3,(TCHAR*)str3.GetBuffer(10),10);
//str3.ReleaseBuffer();
//m_edit3.SetWindowText(str3);//当计算好num1+num2 显示在第三个编辑框控件中
人为手动改变对话框的大小
// TODO: 在此添加控件通知处理程序代码
CString str;
GetDlgItemText(ID_SHOUSUO, str);
if (str == "收缩<<")
{
SetDlgItemText(ID_SHOUSUO, L"扩展>>");
}
else
{
SetDlgItemText(ID_SHOUSUO, L"收缩<<");
}
static CRect rectLarge;
static CRect rectSmall;
if (rectLarge.IsRectNull())
{
CRect rectSeparator;
GetWindowRect(&rectLarge);
GetDlgItem(IDC_SEPARATOR)->GetWindowRect(&rectSeparator);
rectSmall.top = rectLarge.top;
rectSmall.left = rectLarge.left;
rectSmall.bottom = rectLarge.bottom;
rectSmall.right = rectSeparator.right;
}
if (str == "收缩<<")
{
SetWindowPos(NULL, 0, 0, rectSmall.Width(), rectSmall.Height(), SWP_NOZORDER | SWP_NOMOVE);
}
else
{
SetWindowPos(NULL, 0, 0, rectLarge.Width(), rectLarge.Height(), SWP_NOZORDER | SWP_NOMOVE);
}
互斥量的使用
#include <windows.h>
#include <iostream.h>
DWORD WINAPI Fun1Proc(
LPVOID lpParameter // thread data
);
DWORD WINAPI Fun2Proc(
LPVOID lpParameter // thread data
);
int index=0;
int tickets=100;
HANDLE hMutex;
void main()
{
HANDLE hThread1;
HANDLE hThread2;
hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
CloseHandle(hThread1);
CloseHandle(hThread2);
/*while(index++<1000)
cout<<"main thread is running"<<endl;*/
//hMutex=CreateMutex(NULL,TRUE,NULL);
hMutex=CreateMutex(NULL,TRUE,"tickets");
if(hMutex)
{
if(ERROR_ALREADY_EXISTS==GetLastError())
{
cout<<"only instance can run!"<<endl;
return;
}
}
WaitForSingleObject(hMutex,INFINITE);
ReleaseMutex(hMutex);
ReleaseMutex(hMutex);
Sleep(4000);
// Sleep(10);
}
DWORD WINAPI Fun1Proc(
LPVOID lpParameter // thread data
)
{
/*while(index++<1000)
cout<<"thread1 is running"<<endl;*/
/*while(TRUE)
{
//ReleaseMutex(hMutex);
WaitForSingleObject(hMutex,INFINITE);
if(tickets>0)
{
Sleep(1);
cout<<"thread1 sell ticket : "<<tickets--<<endl;
}
else
break;
ReleaseMutex(hMutex);
}*/
WaitForSingleObject(hMutex,INFINITE);
cout<<"thread1 is running"<<endl;
return 0;
}
DWORD WINAPI Fun2Proc(
LPVOID lpParameter // thread data
)
{
/*while(TRUE)
{
//ReleaseMutex(hMutex);
WaitForSingleObject(hMutex,INFINITE);
if(tickets>0)
{
Sleep(1);
cout<<"thread2 sell ticket : "<<tickets--<<endl;
}
else
break;
ReleaseMutex(hMutex);
}*/
WaitForSingleObject(hMutex,INFINITE);
cout<<"thread2 is running"<<endl;
return 0;
}
分享到:
相关推荐
**MFC 学习笔记** MFC(Microsoft Foundation Classes)是微软开发的一种C++类库,用于构建Windows应用程序。它提供了面向对象的编程接口,使得开发者可以更容易地使用Windows API。MFC的主要目标是简化Windows应用...
MFC学习笔记(onenote格式),一个朋友参加MFC培训,其教师在讲课过程中做的学习日记。图文并茂,是初学者很好的学习资料。
《MFC学习笔记:腾讯游戏连连看外挂制作(一)》 在本文中,我们将深入探讨如何使用Microsoft Foundation Classes (MFC) 来开发腾讯游戏连连看的外挂程序。MFC是微软提供的一套C++库,用于简化Windows应用程序的开发...
在C++编程中,MFC(Microsoft ...以上是C++和MFC学习笔记中涉及的关键知识点,涵盖了窗口、绘图、异常处理、消息循环、对话框以及资源管理等多个方面。理解并熟练运用这些概念对于深入掌握C++和MFC编程至关重要。
《Visual C++ MFC 学习笔记》 学习Visual C++ MFC,首先需要具备扎实的C/C++基础知识。这是入门VC开发的基石,因为MFC(Microsoft Foundation Classes)是基于C++的一个类库,对C++的掌握程度直接影响到理解和使用...
在本篇MFC学习笔记中,我们将深入探讨如何使用MFC AppWizard创建不同类型的项目,以及这些项目中的关键类和文件。 首先,我们来看MFC AppWizard如何生成应用程序。AppWizard是MFC提供的一个向导工具,可以根据选择...
### 深入浅出MFC学习笔记:关键知识点解析 #### 一、Windows消息机制与回调函数 在深入探讨MFC之前,我们先来理解Windows操作系统中的消息机制及其核心组成部分——回调函数。 ##### 1.1 Windows消息机制概述 ...
【MFC学习笔记1】 MFC(Microsoft Foundation Classes)是微软提供的一套C++库,用于简化Windows应用程序的开发。本笔记将重点介绍基于对话框的MFC应用程序开发。 7.16 基于对话框编程 对话框在Windows程序中扮演...
**MFC学习笔记——销售系统案例详解** MFC(Microsoft Foundation Classes)是微软提供的一套C++类库,用于构建Windows应用程序。它基于面向对象的编程思想,为开发者提供了丰富的功能,简化了Win32 API的使用。在...
《Visual C++/MFC学习笔记》是一份深入探讨C++和Microsoft Foundation Class (MFC)库的文档,旨在帮助读者掌握使用Visual C++开发Windows应用程序的技能。这份笔记主要分为六个章节,覆盖了从入门到高级的多个主题。...
### C++ MFC 学习笔记精粹 #### C++ 全局变量与静态全局变量的理解 全局变量在C++中扮演着贯穿整个程序的重要角色,它们能够在程序的任何部分被访问,提供了一种跨函数的数据共享机制。然而,全局静态变量的作用...
本篇笔记主要涵盖了MFC中的一些基本功能和常用函数,适合初学者入门学习。 首先,我们来看看如何在MFC中使用消息框。`MessageBeep((WORD)-1)`函数可以发出PC的提示音,提醒用户有事件发生。而`MessageBox`函数则是...
本人从零开始学C++/MFC的时候,积累和整理的学习笔记,其中有大部分常见问题和处理办法,看过很过帖子,也查过很多资料,最终把他们记录下来。 Demo内容: ★ ::OnTimer OnTimer()函数用于实现定时控制功能,定时...
《深入探索MFC与Windows32编程》 MFC(Microsoft Foundation Classes)是微软提供的一套C++类库,用于简化Windows应用程序开发。...通过深入学习这两方面的知识,开发者可以构建出功能丰富、性能优异的应用程序。
MFC 菜单操作学习笔记 本文是关于 MFC 菜单操作学习笔记 的资源,旨在帮助开发者学习和掌握 MFC 菜单操作的技术。下面是对该资源的详细解释和知识点总结。 一、创建菜单 MFC 菜单操作学习笔记 中提供了两种创建...
学习教程 https://www.bilibili.com/video/BV1JW41147NX/?spm_id_from=333.999.0.0
MFC本身也是基于Windows API构建的,因此理解Windows API对于深入学习MFC至关重要。 ### 内存管理 C++中的内存管理是一个关键且复杂的话题。`new`和`delete`是C++中用于动态分配和释放内存的关键字。`new`操作符...
在学习MFC时,你需要了解以下几个核心概念和知识点: 1. **基本概念**:MFC是由一系列C++类组成的库,这些类封装了Windows API的功能。它提供了窗口、控件、文档/视图架构、消息映射、数据库访问等组件,帮助开发者...