Windows编程基础--第18节 MFC之窗体操作
来源:互联网 发布:程序员修改bug搞笑图 编辑:程序博客网 时间:2024/06/06 02:38
今天学习一下MFC窗体的基本操作:
- 最大化
- 最小化
- 还原
- 关闭窗口
- 设置窗口大小
- 设置窗口位置
- 居中显示窗口
- 顶层显示窗口
- 设置窗口图标
- 获取窗口标题
- 设置窗口标题
1. 最大化
SendMessage(WM_SYSCOMMAND,SC_MAXIMIZE,0)
2. 最小化
SendMessage(WM_SYSCOMMAND,SC_MINIMIZE,0)
3. 还原窗口
SendMessage(WM_SYSCOMMAND,SC_RESTORE,0)
4. 关闭窗口
SendMessage(WM_CLOSE,0,0)
5. 设置窗口大小及位置
MoveWindow(100,200,600,450);
或
SetWindowPos(NULL,500,100,700,500,SWP_NOZORDER);
6. 居中显示窗口
SendMessage(WM_CLOSE,0,0)
7.顶层显示窗口
设置顶层显示
::SetWindowPos(m_hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);取消顶层显示
::SetWindowPos(m_hWnd,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
8.设置窗口图标
HICON hIcon = AfxGetApp()->LoadIcon(IDI_ICON_LOL);
SetIcon(hIcon, TRUE); // 设置大图标
SetIcon(hIcon, FALSE); // 设置小图标
9.获取窗口标题
GetWindowText(str);
10.设置窗口标题
SetWindowText(_T(“LOL”));
附源码:
// day20Dlg.cpp : 实现文件//#include "stdafx.h"#include "day20.h"#include "day20Dlg.h"#include "afxdialogex.h"#ifdef _DEBUG#define new DEBUG_NEW#endif// 用于应用程序“关于”菜单项的 CAboutDlg 对话框class CAboutDlg : public CDialogEx{public: CAboutDlg();// 对话框数据 enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持// 实现protected: DECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD){}void CAboutDlg::DoDataExchange(CDataExchange* pDX){ CDialogEx::DoDataExchange(pDX);}BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)END_MESSAGE_MAP()// Cday20Dlg 对话框Cday20Dlg::Cday20Dlg(CWnd* pParent /*=NULL*/) : CDialogEx(Cday20Dlg::IDD, pParent){ m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);}void Cday20Dlg::DoDataExchange(CDataExchange* pDX){ CDialogEx::DoDataExchange(pDX);}BEGIN_MESSAGE_MAP(Cday20Dlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BUTTON1, &Cday20Dlg::OnBnClickedButton1) ON_BN_CLICKED(IDC_BUTTON2, &Cday20Dlg::OnBnClickedButton2) ON_BN_CLICKED(IDC_BUTTON3, &Cday20Dlg::OnBnClickedButton3) ON_BN_CLICKED(IDC_BUTTON4, &Cday20Dlg::OnBnClickedButton4) ON_WM_CLOSE() ON_BN_CLICKED(IDC_BUTTON5, &Cday20Dlg::OnBnClickedButton5) ON_BN_CLICKED(IDC_BUTTON6, &Cday20Dlg::OnBnClickedButton6) ON_BN_CLICKED(IDC_BUTTON7, &Cday20Dlg::OnBnClickedButton7) ON_BN_CLICKED(IDC_CHECK1, &Cday20Dlg::OnBnClickedCheck1) ON_BN_CLICKED(IDC_BUTTON8, &Cday20Dlg::OnBnClickedButton8) ON_BN_CLICKED(IDC_BUTTON9, &Cday20Dlg::OnBnClickedButton9)END_MESSAGE_MAP()// Cday20Dlg 消息处理程序BOOL Cday20Dlg::OnInitDialog(){ CDialogEx::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 HICON hIcon = AfxGetApp()->LoadIcon(IDI_ICON_LOL); SetIcon(hIcon, TRUE); // 设置大图标 SetIcon(hIcon, FALSE); // 设置小图标 SetWindowText(_T("LOL")); // TODO: 在此添加额外的初始化代码 return TRUE; // 除非将焦点设置到控件,否则返回 TRUE}void Cday20Dlg::OnSysCommand(UINT nID, LPARAM lParam){ if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); }}// 如果向对话框添加最小化按钮,则需要下面的代码// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,// 这将由框架自动完成。void Cday20Dlg::OnPaint(){ if (IsIconic()) { CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作区矩形中居中 int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // 绘制图标 dc.DrawIcon(x, y, m_hIcon); } else { CDialogEx::OnPaint(); }}//当用户拖动最小化窗口时系统调用此函数取得光标//显示。HCURSOR Cday20Dlg::OnQueryDragIcon(){ return static_cast<HCURSOR>(m_hIcon);}void Cday20Dlg::OnBnClickedButton1(){ // TODO: 在此添加控件通知处理程序代码 SendMessage(WM_SYSCOMMAND,SC_MAXIMIZE,0);}void Cday20Dlg::OnBnClickedButton2(){ // TODO: 在此添加控件通知处理程序代码 SendMessage(WM_SYSCOMMAND,SC_MINIMIZE,0);}void Cday20Dlg::OnBnClickedButton3(){ // TODO: 在此添加控件通知处理程序代码 SendMessage(WM_SYSCOMMAND,SC_RESTORE,0);}void Cday20Dlg::OnBnClickedButton4(){ // TODO: 在此添加控件通知处理程序代码 SendMessage(WM_CLOSE,0,0);}void Cday20Dlg::OnClose(){ // TODO: 在此添加消息处理程序代码和/或调用默认值 if ( IDYES == MessageBox(_T("关闭窗口?"),NULL,MB_YESNO)) { CDialogEx::OnClose(); }}void Cday20Dlg::OnBnClickedButton5(){ // TODO: 在此添加控件通知处理程序代码 MoveWindow(100,200,600,450);}void Cday20Dlg::OnBnClickedButton6(){ // TODO: 在此添加控件通知处理程序代码 SetWindowPos(NULL,500,100,700,500,SWP_NOZORDER);}void Cday20Dlg::OnBnClickedButton7(){ // TODO: 在此添加控件通知处理程序代码 CenterWindow();}void Cday20Dlg::OnBnClickedCheck1(){ // TODO: 在此添加控件通知处理程序代码 BOOL bTop = static_cast<CButton*>(GetDlgItem(IDC_CHECK1))->GetCheck(); if (bTop) { ::SetWindowPos(m_hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE); } else { ::SetWindowPos(m_hWnd,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE); }}void Cday20Dlg::OnBnClickedButton8(){ // TODO: 在此添加控件通知处理程序代码 TCHAR tcText[20]; GetDlgItemText(IDC_EDIT_TEXT,tcText,20); SetWindowText(tcText);}void Cday20Dlg::OnBnClickedButton9(){ // TODO: 在此添加控件通知处理程序代码 CString str; GetWindowText(str); AfxMessageBox(str);}
项目源码可以访问我的码云
>>>我的私人博客<<<
阅读全文
0 0
- Windows编程基础--第18节 MFC之窗体操作
- Windows编程基础--第13节 MFC之图片控件
- Windows编程基础--第19节 MFC之自定义消息
- Windows编程基础--第11节 MFC之列表控件CListCtrl
- Windows编程基础--第12节 MFC之树控件CTreeCtrl
- Windows编程基础--第14节 MFC之文件对话框CFileDialog
- Windows编程基础--第15节 MFC之复选框及单选按钮
- Windows编程基础--第16节 MFC之SendMessage和PostMessage
- Windows编程基础--第17节 MFC之状态栏(CStatusBar)
- Windows编程基础--第3节 初探MFC
- Windows编程基础--第4节 MFC消息映射机制
- Windows编程基础--第5节 MFC对话框程序
- Windows编程基础--第10节 MFC菜单
- Windows 窗体(Windows Form)/MFC 编程差异
- Windows编程基础--窗体篇
- Windows编程基础--第8节 MFC对话框控件访问的七种方法(上)
- Windows编程基础--第9节 MFC对话框控件访问的七种方法(下)
- 基于MFC的windows窗体编程
- Go语言动态规划矩阵连乘
- SSL2838 2017年11月6日提高组T1 矩阵(贪心)
- linux
- Java【Server Tomcat v7.0 Server at localhost failed to start.解决办法】
- git 合并多个patch
- Windows编程基础--第18节 MFC之窗体操作
- paperweekly 李纪为 对话机器人直播。
- Ubuntu16.04在Oracle VM的安装步骤
- C++基础(一)——大端存储和小端存储
- is not assignable to
- 首篇博客---接触虚拟机
- 设计模式之单例模式(Java)
- 2017年11月7日 第二十九次总结
- SpringBoot入门