文章目录

  • 界面制作
  • 制作菜单
    • 设置编译框随着窗口的变化而变化OnSize
    • 打开文件
    • 文件另存为
    • 设置字体颜色
    • 修改字体
    • 文件的查找与替换
      • 查找与替换对话框显示(非模态对话框)
      • 对话框消息与对话框处理函数
  • 全部代码

界面制作

制作菜单

选择Menu 点击新建

将内容写入"_"的用& 符号

将菜单加入到窗口中

设置编译框随着窗口的变化而变化OnSize

//设置编译框随着窗口的变化而变化
void CnotepadPlusDlg::OnSize(UINT nType, int cx, int cy)
{CDialogEx::OnSize(nType, cx, cy);//获取控件CWnd* pEdit=GetDlgItem(IDC_EDIT1);if(pEdit!=NULL)pEdit->MoveWindow(0, 0, cx, cy);
}

打开文件

右键选择添加事件处理程序

点击确定

Edit设置多行显示

Edit设置按回车能够换行

Edit设置竖直方向滚动

打开文件代码

//打开文件
void CnotepadPlusDlg::OnOpen()
{CFileDialog dlg(TRUE);if (IDCANCEL == dlg.DoModal())return;CString strFilePath = dlg.GetPathName();//获取全路径CString strFileName = dlg.GetFileName();//文件操作//CFile 文件类CFile file;if (FALSE == file.Open(strFilePath, CFile::modeRead))//file.Open(文件路径,文件读取模式){MessageBox(L"打开文件失败", L"温馨提示",MB_OK);return;}//读取内容CStringA strContent ;//清空数组char szContent[10] = { 0 };while (file.Read(szContent, 2)){strContent = strContent+szContent;//内容连接}//编码转换CCharset charset;wchar_t* wContent=charset.AnsiToUnicode(strContent);//设置窗口SetDlgItemText(IDC_EDIT1, wContent);//设置标题CString strTitle;strTitle.Format(L"超级记事本-%s[%d字节]", strFileName, file.GetLength());SetWindowText(strTitle);file.Close();
}

文件另存为

void CnotepadPlusDlg::OnSaveAs()
{CFileDialog dlg(FALSE,NULL,NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, L"文本文件(*.txt)|*.txt|所有文件(*.*)|*.*||");if (IDCANCEL == dlg.DoModal())return;CString strFilePath = dlg.GetPathName();CFile file;if (FALSE == file.Open(strFilePath, CFile::modeCreate |CFile::modeWrite))//file.Open(文件路径,文件读取模式){MessageBox(L"打开文件失败", L"温馨提示", MB_OK);return;}//读取出控件中所有的文本CString strContent;GetDlgItemText(IDC_EDIT1, strContent);//另存为UnicodeCCharset charset;char* content=charset.UnicodeToAnsi(strContent);//file.Write(strContent, strContent.GetLength() * 2);file.Write(content, strlen(content));file.Close();//::MultiByteToWideChar//::WideCharToMultiByte
}

设置字体颜色

//设置颜色
void CnotepadPlusDlg::OnBtmColor()
{CColorDialog dlg;if (IDCANCEL == dlg.DoModal())return;m_color = dlg.GetColor();//获取到颜色}//编辑控件颜色
HBRUSH CnotepadPlusDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);switch (pWnd->GetDlgCtrlID()){case IDC_EDIT1:pDC->SetTextColor(m_color);break;}return hbr;
}

修改字体

//修改字体
void CnotepadPlusDlg::OnBtnFont()
{//字体选择对话框CFontDialog dlg;if (IDCANCEL == dlg.DoModal())return;//设置字体CFont font;font.CreatePointFont(dlg.GetSize(), dlg.GetFaceName());GetDlgItem(IDC_EDIT1)->SetFont(&font);
}

文件的查找与替换

查找与替换对话框显示(非模态对话框)

//显示
//查找非模态对话框,需要注册消息
void CnotepadPlusDlg::OnFind()
{CFindReplaceDialog* pFindDlg=new CFindReplaceDialog;//第一个:TRUE 代表查找框  FALSE 代表替换框//第二个参数:要查找的东西//第三个:要替换的东西pFindDlg->Create(TRUE,NULL,NULL);pFindDlg->ShowWindow(SW_SHOW);m_bFind=TRUE;//查找}//替换
void CnotepadPlusDlg::OnReplace()
{CFindReplaceDialog* pFindDlg = new CFindReplaceDialog;//第一个:TRUE 代表查找框  FALSE 代表替换框//第二个参数:要查找的东西//第三个:要替换的东西pFindDlg->Create(FALSE, NULL, NULL);pFindDlg->ShowWindow(SW_SHOW);m_bFind = FALSE;//替换
}

对话框消息与对话框处理函数


对话框处理函数

//CFindReplaceDialog处理函数
LONG CnotepadPlusDlg::OnFindReplace(WPARAM wParam, LPARAM lParam)
{CFindReplaceDialog* pFindReplaceDlg = CFindReplaceDialog::GetNotifier(lParam);//接收查找到的参数,获取窗口指针if (pFindReplaceDlg == NULL)return 0;//pFindReplaceDlg->IsTerminating();//是否点击关闭if (pFindReplaceDlg->IsTerminating()){return 0;}CString strFindString=pFindReplaceDlg->GetFindString();//要查找的字符串CString strRepalceString = pFindReplaceDlg->GetReplaceString();//要替换的字符串BOOL bSearchDown=pFindReplaceDlg->SearchDown();//判断是否向下查找BOOL bMatchCase=pFindReplaceDlg->MatchCase();//匹配大小写int nStartIndex = 0, nEndIndex = 0;//光标的开始和结束位置//获取编辑框里面的所有文本CString strContent;GetDlgItemText(IDC_EDIT1, strContent);//操纵控件CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT1);//查找if (m_bFind){//向下查找if (bSearchDown){//获取光标位置pEdit->GetSel(nStartIndex, nEndIndex);nStartIndex=strContent.Find(strFindString, nEndIndex);//要查找的内容一直到结束位置//找到了if (nStartIndex != -1){pEdit->SetSel(nStartIndex, nStartIndex + strFindString.GetLength());pEdit->SetFocus();//蓝色}else{//找不到重头开始找nStartIndex = strContent.Find(strFindString, 0);//找不到if (nStartIndex == -1){MessageBox(L"没有找到");return 0;}pEdit->SetSel(nStartIndex, nStartIndex + strFindString.GetLength());pEdit->SetFocus();//蓝色}}else//向上查找{pEdit->GetSel(nStartIndex, nEndIndex);strContent = strContent.MakeReverse();//反转字符串倒着查找CString strReverseFindString=strFindString.MakeReverse();//反转后查找字符串nStartIndex = strContent.Find(strReverseFindString,strContent.GetLength()-nStartIndex);//要查找的内容一直到结束位置,比如有10个是第二个数为2,反转后在第八个数的位置上if (nStartIndex != -1){//设置光标nEndIndex = strContent.GetLength()-nStartIndex-1;pEdit->SetSel(nEndIndex+1-strFindString.GetAllocLength(),nEndIndex+1);pEdit->SetFocus();}else{}}}else//替换{//查找下一个if (pFindReplaceDlg->FindNext()){}//替换当前if (pFindReplaceDlg->ReplaceCurrent()){nStartIndex=strContent.Find(strFindString);if (nStartIndex == -1){MessageBox(L"没有查找到");return 0;}else{nEndIndex = nStartIndex + strFindString.GetLength();//做截取CString strLeft=strContent.Left(nStartIndex);//获取左右CString strRight = strContent.Right(strContent.GetLength()- nEndIndex);//替换的链接strContent = strLeft + strRepalceString + strRight;pEdit->SetWindowText(strContent);//设置文本内容}}//替换全部if (pFindReplaceDlg->ReplaceAll()){int nCount= strContent.Replace(strFindString,strRepalceString);pEdit->SetWindowText(strContent);CString str;str.Format(L"总共替换了%d处", nCount);MessageBox(str);}}return 0;
}

全部代码

//notepadPlusDlg.h

// notepadPlusDlg.h: 头文件
//#pragma once// CnotepadPlusDlg 对话框
class CnotepadPlusDlg : public CDialogEx
{// 构造
public:CnotepadPlusDlg(CWnd* pParent = nullptr);   // 标准构造函数// 对话框数据
#ifdef AFX_DESIGN_TIMEenum { IDD = IDD_NOTEPADPLUS_DIALOG };
#endifprotected:virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持// 实现
protected:HICON m_hIcon;// 生成的消息映射函数virtual BOOL OnInitDialog();afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();DECLARE_MESSAGE_MAP()
public:COLORREF m_color;BOOL m_bFind;//判断是点击了查找还是替换afx_msg void OnBnClickedOk();afx_msg void OnEnChangeEdit1();afx_msg void OnSize(UINT nType, int cx, int cy);afx_msg void OnOpen();afx_msg void OnSaveAs();afx_msg void OnBtmColor();afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);afx_msg void OnBtnFont();afx_msg void OnFind();afx_msg void OnReplace();afx_msg LONG OnFindReplace(WPARAM wParam, LPARAM lParam);//定义关联函数};

//notepadPlusDlg.cpp

// notepadPlusDlg.cpp: 实现文件
//#include "pch.h"
#include "framework.h"
#include "notepadPlus.h"
#include "notepadPlusDlg.h"
#include "afxdialogex.h"
#include "CCharset.h"#ifdef _DEBUG
#define new DEBUG_NEW
#endif//注册消息
static UINT WM_FINDREPLACE = ::RegisterWindowMessage(FINDMSGSTRING);// CnotepadPlusDlg 对话框CnotepadPlusDlg::CnotepadPlusDlg(CWnd* pParent /*=nullptr*/): CDialogEx(IDD_NOTEPADPLUS_DIALOG, pParent)
{m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);m_color = RGB(0, 0, 0);m_bFind=FALSE;}void CnotepadPlusDlg::DoDataExchange(CDataExchange* pDX)
{CDialogEx::DoDataExchange(pDX);
}BEGIN_MESSAGE_MAP(CnotepadPlusDlg, CDialogEx)ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDOK, &CnotepadPlusDlg::OnBnClickedOk)ON_EN_CHANGE(IDC_EDIT1, &CnotepadPlusDlg::OnEnChangeEdit1)ON_WM_SIZE()ON_COMMAND(IDM_OPEN, &CnotepadPlusDlg::OnOpen)ON_COMMAND(IDM_SAVE_AS, &CnotepadPlusDlg::OnSaveAs)ON_COMMAND(IDM_BTM_COLOR, &CnotepadPlusDlg::OnBtmColor)ON_WM_CTLCOLOR()ON_COMMAND(IDM_BTN_FONT, &CnotepadPlusDlg::OnBtnFont)ON_COMMAND(IDM_FIND, &CnotepadPlusDlg::OnFind)ON_COMMAND(ID_REPLACE, &CnotepadPlusDlg::OnReplace)ON_REGISTERED_MESSAGE(WM_FINDREPLACE, &CnotepadPlusDlg::OnFindReplace)
END_MESSAGE_MAP()// CnotepadPlusDlg 消息处理程序BOOL CnotepadPlusDlg::OnInitDialog()
{CDialogEx::OnInitDialog();// 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动//  执行此操作SetIcon(m_hIcon, TRUE);           // 设置大图标SetIcon(m_hIcon, FALSE);        // 设置小图标// TODO: 在此添加额外的初始化代码return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}// 如果向对话框添加最小化按钮,则需要下面的代码
//  来绘制该图标。  对于使用文档/视图模型的 MFC 应用程序,
//  这将由框架自动完成。void CnotepadPlusDlg::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 CnotepadPlusDlg::OnQueryDragIcon()
{return static_cast<HCURSOR>(m_hIcon);
}void CnotepadPlusDlg::OnBnClickedOk()
{// TODO: 在此添加控件通知处理程序代码//CDialogEx::OnOK();
}void CnotepadPlusDlg::OnEnChangeEdit1()
{// TODO:  如果该控件是 RICHEDIT 控件,它将不// 发送此通知,除非重写 CDialogEx::OnInitDialog()// 函数并调用 CRichEditCtrl().SetEventMask(),// 同时将 ENM_CHANGE 标志“或”运算到掩码中。// TODO:  在此添加控件通知处理程序代码
}//设置编译框随着窗口的变化而变化
void CnotepadPlusDlg::OnSize(UINT nType, int cx, int cy)
{CDialogEx::OnSize(nType, cx, cy);//获取控件CWnd* pEdit=GetDlgItem(IDC_EDIT1);if(pEdit!=NULL)pEdit->MoveWindow(0, 0, cx, cy);
}//打开文件
void CnotepadPlusDlg::OnOpen()
{CFileDialog dlg(TRUE);if (IDCANCEL == dlg.DoModal())return;CString strFilePath = dlg.GetPathName();//获取全路径CString strFileName = dlg.GetFileName();//文件操作//CFile 文件类CFile file;if (FALSE == file.Open(strFilePath, CFile::modeRead))//file.Open(文件路径,文件读取模式){MessageBox(L"打开文件失败", L"温馨提示",MB_OK);return;}//读取内容CStringA strContent ;//清空数组char szContent[10] = { 0 };while (file.Read(szContent, 2)){strContent = strContent+szContent;//内容连接}//编码转换CCharset charset;wchar_t* wContent=charset.AnsiToUnicode(strContent);//设置窗口SetDlgItemText(IDC_EDIT1, wContent);//设置标题CString strTitle;strTitle.Format(L"超级记事本-%s[%d字节]", strFileName, file.GetLength());SetWindowText(strTitle);file.Close();
}//另存为
void CnotepadPlusDlg::OnSaveAs()
{CFileDialog dlg(FALSE,NULL,NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, L"文本文件(*.txt)|*.txt|所有文件(*.*)|*.*||");if (IDCANCEL == dlg.DoModal())return;CString strFilePath = dlg.GetPathName();CFile file;if (FALSE == file.Open(strFilePath, CFile::modeCreate |CFile::modeWrite))//file.Open(文件路径,文件读取模式){MessageBox(L"打开文件失败", L"温馨提示", MB_OK);return;}//读取出控件中所有的文本CString strContent;GetDlgItemText(IDC_EDIT1, strContent);//另存为UnicodeCCharset charset;char* content=charset.UnicodeToAnsi(strContent);//file.Write(strContent, strContent.GetLength() * 2);file.Write(content, strlen(content));file.Close();}//设置颜色
void CnotepadPlusDlg::OnBtmColor()
{CColorDialog dlg;if (IDCANCEL == dlg.DoModal())return;m_color = dlg.GetColor();//获取到颜色}//编辑控件颜色
HBRUSH CnotepadPlusDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);switch (pWnd->GetDlgCtrlID()){case IDC_EDIT1:pDC->SetTextColor(m_color);break;}return hbr;
}//修改字体
void CnotepadPlusDlg::OnBtnFont()
{//字体选择对话框CFontDialog dlg;if (IDCANCEL == dlg.DoModal())return;//设置字体CFont font;font.CreatePointFont(dlg.GetSize(), dlg.GetFaceName());GetDlgItem(IDC_EDIT1)->SetFont(&font);
}//显示
//查找非模态对话框,需要注册消息
void CnotepadPlusDlg::OnFind()
{CFindReplaceDialog* pFindDlg=new CFindReplaceDialog;//第一个:TRUE 代表查找框  FALSE 代表替换框//第二个参数:要查找的东西//第三个:要替换的东西pFindDlg->Create(TRUE,NULL,NULL);pFindDlg->ShowWindow(SW_SHOW);m_bFind=TRUE;//查找}//替换
void CnotepadPlusDlg::OnReplace()
{CFindReplaceDialog* pFindDlg = new CFindReplaceDialog;//第一个:TRUE 代表查找框  FALSE 代表替换框//第二个参数:要查找的东西//第三个:要替换的东西pFindDlg->Create(FALSE, NULL, NULL);pFindDlg->ShowWindow(SW_SHOW);m_bFind = FALSE;//替换
}//CFindReplaceDialog处理函数
LONG CnotepadPlusDlg::OnFindReplace(WPARAM wParam, LPARAM lParam)
{CFindReplaceDialog* pFindReplaceDlg = CFindReplaceDialog::GetNotifier(lParam);//接收查找到的参数,获取窗口指针if (pFindReplaceDlg == NULL)return 0;//pFindReplaceDlg->IsTerminating();//是否点击关闭if (pFindReplaceDlg->IsTerminating()){return 0;}CString strFindString=pFindReplaceDlg->GetFindString();//要查找的字符串CString strRepalceString = pFindReplaceDlg->GetReplaceString();//要替换的字符串BOOL bSearchDown=pFindReplaceDlg->SearchDown();//判断是否向下查找BOOL bMatchCase=pFindReplaceDlg->MatchCase();//匹配大小写int nStartIndex = 0, nEndIndex = 0;//光标的开始和结束位置//获取编辑框里面的所有文本CString strContent;GetDlgItemText(IDC_EDIT1, strContent);//操纵控件CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT1);//查找if (m_bFind){//向下查找if (bSearchDown){//获取光标位置pEdit->GetSel(nStartIndex, nEndIndex);nStartIndex=strContent.Find(strFindString, nEndIndex);//要查找的内容一直到结束位置//找到了if (nStartIndex != -1){pEdit->SetSel(nStartIndex, nStartIndex + strFindString.GetLength());pEdit->SetFocus();//蓝色}else{//找不到重头开始找nStartIndex = strContent.Find(strFindString, 0);//找不到if (nStartIndex == -1){MessageBox(L"没有找到");return 0;}pEdit->SetSel(nStartIndex, nStartIndex + strFindString.GetLength());pEdit->SetFocus();//蓝色}}else//向上查找{pEdit->GetSel(nStartIndex, nEndIndex);strContent = strContent.MakeReverse();//反转字符串倒着查找CString strReverseFindString=strFindString.MakeReverse();//反转后查找字符串nStartIndex = strContent.Find(strReverseFindString,strContent.GetLength()-nStartIndex);//要查找的内容一直到结束位置,比如有10个是第二个数为2,反转后在第八个数的位置上if (nStartIndex != -1){//设置光标nEndIndex = strContent.GetLength()-nStartIndex-1;pEdit->SetSel(nEndIndex+1-strFindString.GetAllocLength(),nEndIndex+1);pEdit->SetFocus();}else{}}}else//替换{//查找下一个if (pFindReplaceDlg->FindNext()){}//替换当前if (pFindReplaceDlg->ReplaceCurrent()){nStartIndex=strContent.Find(strFindString);if (nStartIndex == -1){MessageBox(L"没有查找到");return 0;}else{nEndIndex = nStartIndex + strFindString.GetLength();//做截取CString strLeft=strContent.Left(nStartIndex);//获取左右CString strRight = strContent.Right(strContent.GetLength()- nEndIndex);//替换的链接strContent = strLeft + strRepalceString + strRight;pEdit->SetWindowText(strContent);//设置文本内容}}//替换全部if (pFindReplaceDlg->ReplaceAll()){int nCount= strContent.Replace(strFindString,strRepalceString);pEdit->SetWindowText(strContent);CString str;str.Format(L"总共替换了%d处", nCount);MessageBox(str);}}return 0;
}

//CCharset.h

#pragma once
class CCharset
{private:wchar_t* m_wstr;char* m_str;char* m_utf8;
public:CCharset();~CCharset();//ANSIתUnicodewchar_t* AnsiToUnicode(const char* str);//UnicodeתANSIchar* UnicodeToAnsi(const wchar_t* wstr);//UTF8 תANSIchar* Utf8ToAnsi(const char* str);//ANSIתUTF - 8char* AnsitoUtf8(const char* str);//Unicode ת UTF-8char* UnicodeToUtf8(const wchar_t* wstr);//UTF-8תUnicodewchar_t* Utf8ToUnicode(const char* str);};

//CCharset.cpp

#include "pch.h"
#include "CCharset.h"CCharset::CCharset()
{m_wstr = NULL;m_str = NULL;m_utf8 = NULL;
}CCharset::~CCharset()
{if (m_wstr){delete m_wstr;m_wstr = NULL;}if (m_str){delete m_str;m_str = NULL;}if (m_utf8){delete[] m_utf8;m_utf8 = NULL;}
}//ANSI转Unicode
wchar_t* CCharset::AnsiToUnicode(const char* str)
{if (m_wstr)//安全{delete[] m_wstr;m_wstr = NULL;}DWORD dwSize=::MultiByteToWideChar(CP_ACP,0,str,-1,NULL,0);//求宽字符的大小m_wstr = new wchar_t[dwSize];::MultiByteToWideChar(CP_ACP, 0, str, -1, m_wstr, dwSize);return m_wstr;
}//Unicode转ANSI
char * CCharset::UnicodeToAnsi(const wchar_t * wstr)
{if (m_str){delete[] m_str;m_str = NULL;}DWORD dwSize=WideCharToMultiByte(CP_ACP, 0, wstr, -1,NULL,0,NULL,NULL);//求字符的大小m_str = new char[dwSize];::WideCharToMultiByte(CP_ACP, 0, wstr, -1, m_str, dwSize, NULL, NULL);return m_str;
}char * CCharset::Utf8ToAnsi(const char * str)
{if (m_wstr){delete[] m_wstr;m_wstr = NULL;}if (m_str){delete[] m_str;m_str = NULL;}//UTF-8 转Unicodem_wstr= Utf8ToUnicode(str);//Unicode 转ANSIm_str= UnicodeToAnsi(m_wstr);return m_str;
}char* CCharset::AnsitoUtf8(const char* str)
{if (m_wstr){delete[] m_wstr;m_wstr = NULL;}if (m_utf8){delete[] m_utf8;m_utf8 = NULL;}//Ansi 转Unicodem_wstr= AnsiToUnicode(str);//Unicode 转UTF-8m_utf8=UnicodeToUtf8(m_wstr);return m_utf8;
}//Unicode 转 UTF-8
char * CCharset::UnicodeToUtf8(const wchar_t * wstr)
{if (m_utf8){delete[] m_utf8;m_utf8 = NULL;}DWORD dwSize=WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL);m_utf8 = new char[dwSize];memset(m_utf8,0,dwSize);//清空内存WideCharToMultiByte(CP_UTF8, 0, wstr, -1, m_utf8, dwSize, NULL, NULL);return m_utf8;
}//utf8 转Unicode
wchar_t* CCharset::Utf8ToUnicode(const char * str)
{if (m_wstr){delete m_wstr;m_wstr = NULL;}DWORD dwSize=MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0);m_wstr = new wchar_t[dwSize];memset(m_wstr, 0, dwSize*sizeof(wchar_t));//清空内存MultiByteToWideChar(CP_UTF8, 0, str, -1, m_wstr, dwSize);return m_wstr;
}

11 MFC 制作记事本相关推荐

  1. MFC制作Windows画图程序(二)

    继<MFC制作Windows画图程序(一)> 文章目录 7 颜色填充功能 8 选择画笔颜色 9 设置画笔粗细 10 将绘制出来的图形保存的实现 11 添加位图 7 颜色填充功能 油漆桶功能 ...

  2. 《Splunk智能运维实战》——3.11 制作折线图显示项目浏览量和购买量随时间的变化...

    本节书摘来自华章计算机<Splunk智能运维实战>一书中的第3章,第3.11节,作者 [美]乔史·戴昆(Josh Diakun),保罗R.约翰逊(Paul R. Johnson),德莱克· ...

  3. mfc制作登录界面mysql_MFC制作漂亮界面之登录界面

    [实例简介] MFC制作漂亮界面之登录界面的源码,主要使用前面学过的内容来实践一个完整的界面. [实例截图] [核心代码] LoginTigger └── LoginTigger ├── LoginT ...

  4. 如何基于MFC制作简易绘图软件

    本文将讲解如何通过MFC制作一个简易的绘图软件 文章目录 一.构造软件的界面 二.画出图形 三.图形的保存与重绘 四.程序下载 一.构造软件的界面 首先新建一个MFC的工程,进入之后按F5调试,可以看 ...

  5. C++之MFC制作简单计算器(VS2019实现),附带完整代码

    资源下载 代码下载 代码失效可以联系本人: 15377920718 效果演示 MFC制作简单的计算器(VS2019实现) VS2019可以用于制作简单的计算器,用的是MFC,通过设立button以及编 ...

  6. 使用Qt制作记事本软件程序

    原创:http://blog.csdn.net/u013383042/article/details/50689080 使用Qt制作记事本软件,实现了打开,保存,另存,关闭,关于等功能. 并且实现了软 ...

  7. 用MFC制作一个倒计时小程序

    用MFC制作一个倒计时小程序 1.思路: 1)初始步骤1:新建一个工程,选择MFC AppWizard(exe),工程名命名为CdTimer,选择基于对话框形式的应用程序,将此主对话框用于显示剩余的时 ...

  8. mfc 制作不同的文档模板mdi不同的子窗体_制作ACK集群自定义节点镜像的正确姿势...

    随着云原生时代的到来,用户应用.业务上云的需求也越来越多,不同的业务场景对容器平台的需求也不尽相同,其中一个非常重要的需求就是使用自定义镜像创建ACK集群. ACK支持用户使用自定义镜像创建Kuber ...

  9. 用MFC制作程序启动logo

    完了,这次土鳖了,介绍个非常过时的东西,其实就是自己收藏一下,怕以后想用的时候自己忘了. 直接进入正题,首先用ps等工具做一个自己喜欢的程序启动的logo位图,我这里制作的logo大小为500*313 ...

最新文章

  1. Idea+Jconsole实现线程监控
  2. jquery配合.NET实现点击指定绑定数据并且能够一键下载
  3. javascript数组的各种操作
  4. 算法(八):图解KNN算法
  5. Mysql密码忘记怎么办?重置密码完整教程
  6. 油猴Tampermonkey及脚本使用
  7. 【一起学习输入法】华宇拼音输入法开源版本解析(7)
  8. ios 开发证书导出p12文件_iOS 证书(.p12)和描述文件(.mobileprovision)的导出和使用方法...
  9. Epub 转 txt
  10. 工业软件国产化路在何方?INTEWELL助力民族工业落地生“根”
  11. AJAX简单思维导图
  12. 基于V4L2的视频驱动开发(2) 华清远见 刘洪涛
  13. 常见的一些 HTTP状态码 404 502 503
  14. 「RocketMQ技术专题」帮你梳理RocketMQ/Kafka的选择理由及二者PK
  15. 局域网arp攻击_一篇文章告诉你,什么是ARP协议与ARP欺骗
  16. Allegro172版本DFM规则之DFA Package spacing
  17. 可能是全网唯一一个基于windows和java的关于selenium webDriver绕过网站反爬服务的方法
  18. 企业微信方便做售后吗?企微SCRM_带你体验私域流量新玩法
  19. Grafana的Worldmap使用,添加Mysql 数据源
  20. 鸟类及动物声音辨识方法原理进展境况转自知乎

热门文章

  1. matlab projinv,有没有大神救救孩子?
  2. 排坑:运行win32com.client.Dispatch('Word.Application')和docx.Documents.Open()报错
  3. 基于微信小程序的校友录系统
  4. PowerDesigner书签(04)添加ER图表映射关系Cardinality
  5. 跨交换机的VLAN透传
  6. 【Java基础】Java基础100实例
  7. 日记侠:分享赚钱和分享快乐你如何理解?
  8. SRC小技巧:批量获取补天公益SRC网址
  9. 前端处理文件下载时,提示token失效
  10. 阿贾克斯(Ajax)异步请求数据