文章开始之前,推荐一些别人写的很好的文章!感兴趣的也可以去读一下哦!
今日推荐:【机器学习】机器学习回归模型全解析:线性回归、多项式回归、过拟合与泛化、向量相关性与岭回归的理论与实践
文章链接:https://cloud.tencent.com/developer/article/2465870
通过这篇文章学习机器学习中的回归任务是指通过训练数据学习一个映射关系,来预测连续值输出。与分类任务不同,回归任务的输出是一个实数值。
VC++6.0入门——认识MFC框架
本章将剖析基于MFC的框架程序,探讨MFC框架程序的内部组织结构。MFC(Microsoft Foundation Class,微软基础类库)是微软为了简化程序员的开发工作所开发的一套C++类的集合,是一套面向对象的函数库,以类的方式提供给用户使用。利用这些类,可以有效地帮助程序员完成Windows应用程序的开发。
在这个程序中,我们自己没有编写任何代码,就生成了一个带有标题栏,具有最小化框、最大化框,具有系统菜单和一个可调边框的应用程序。这个程序和我们在第1章中所创建的程序类似,但比后者多了菜单栏、工具栏以及状态栏。这一切都是通过MFC AppWizard生成的。
class CWnd
{
public:
BOOL CreateEx(
DWORD dwExStyle,
DWORD dwExStyle, // extended window style
LPCTSTR lpClassName, // registered class name
LPCTSTR lpWindowName, // window name
DWORD dwStyle, // window style
int x, // horizontal position of window
int y, // vertical position of window
int nWidth, // window width
int nHeight, // window height
HWND hWndParent, // handle to parent or owner window
HMENU hMenu, // menu handle or child identifier
HINSTANCE hInstance, // handle to application instance
LPVOID lpParam); // window-creation data
BOOL ShowWindow(int nCmdShow);
BOOL UpdateWindow();
public:
HWND m_hWnd;
};
// 以下是具体的实现
BOOL CWnd::CreateEx(
DWORD dwExStyle,
DWORD dwExStyle, // extended window style
LPCTSTR lpClassName, // registered class name
LPCTSTR lpWindowName, // window name
DWORD dwStyle, // window style
int x, // horizontal position of window
int y, // vertical position of window
int nWidth, // window width
int nHeight, // window height
HWND hWndParent, // handle to parent or owner window
HMENU hMenu, // menu handle or child identifier
HINSTANCE hInstance, // handle to application instance
LPVOID lpParam) // window-creation data
{
// ::表示调用的是平台全局API函数,
m_hWnd =::CreateWindowEx(dwExStyle,lpClassName,dwStyle,x,y,nWidth,nHeight,hWndParent,
hMenu,hInstance,lpParam);
if(m_hWnd!=NULL)
return TRUE;
else
return FALSE;
}
BOOL CWnd::ShowWindow(int nCmdShow)
{
return ::ShowWindow(m_hWnd,nCmdShow);
}
BOOL CWnd::UpdateWindow()
{
return ::UpdateWindow(m_hWnd);
}
// 主程序
int WINAPI WinMain(
HINSTANCE hInstance, // handle to current instance
HINSTANCE hPrevInstance, // handle to previous instance
LPSTR lpCmdLine, // command line
int nCmdShow) // show state);
{
WNDCLASS cls;
cls.cbClsExtra = 0;
cls.cbWndExtra = 0;
.....
RegisterClass(&cls);
CWnd wnd;
wnd.CreateEx(...);
wnd.ShowWindow(SW_SHOWNORMAL);
wnd.UpdateWindow();
HWND hwnd;
hwnd=CreateWindowEx();
::ShowWindow(hwnd,SW_SHOWNORMAL);
::UpdateWindow(hwnd);
...
}
编译并运行Tst程序,但发现按钮并没有显示出来。问题的原因有两个:一是这里定义的btn对象是个局部对象,当执行到OnCreate函数的右大括号(})时,该对象的生命周期就结束了,就会发生析构。前面已经讲过,如果一个窗口与一个C++窗口类对象相关联,当这个C++对象生命周期结束时,该对象在析构时通常会把与之相关联的窗口资源进行回收。这就是说,当执行到例3-22所示的OnCreate函数的右大括号时,刚刚创建的btn窗口就被与之相关的C++对象销毁了。因此,不能将这个按钮对象定义为一个局部对象。解决方法是:将其定义为CMainFrame类的一个成员变量,可以将其访问权限定义为private类型以实现信息隐藏。
// 定义一个cbutton
m_btn.Create("weixin",WS_CHILD | BS_DEFPUSHBUTTON, CRect(0,0,100,100),this,123);
// 显示
m_btn.ShowWindow(SW_SHOWNORMAL);
根据运行结果,我们可以看到该按钮显示在工具栏上了,这是因为按钮当前的父窗口是CMainFrame类窗口,即主框架窗口。该窗口中,标题栏和菜单都位于非客户区,而工具栏位于它的客户区(关于窗口的客户区和非客户区的内容将在下一章讲解)。我们程序中的按钮是在主框架窗口的客户区出现的,并且其位置由CRect(0,0,100,100)参数指定,说明其左上角就是其父窗口客户区的(0,0)点,因此,该按钮就在程序的菜单下、工具栏上显示出来了。
更进一步修改
VC++6.0入门——认识MFC框架
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。