💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] # **记事本** * * * * * ## 理论区 一、添加类向导 1.windows开发 菜单,按钮,工具栏,快捷键 能发出命令 2.在win32自己写WM_COMMAND 消息 3.主对话框的消息跟虚函数 二、对话框资源属性, a)扩展属性,(Extended Style) Accept Files;支持拖放 (MFC WM_DROPFILES 弹出) Disable:禁用或可用 ClientEdge:深下陷风格 StaticEdge:浅下陷 Set Foreground :前端显示 Topmost:前端显示 Window Edge:透明 Overlaped Window: Application Window: System Menu:系统菜单包括,关闭,最大化,移动,大小等等 Style:Child (在主窗口里不能选择Child(用于子窗口)) b)基础风格: Border: NONE:没有任何边缘和标题栏等;(子页) ReSizIng; 可以改变大小 对话框:不可改变大小 Caption:设置文字 Style:Popup弹出式, child(子页) Title:标题栏是否显示 三、编辑控件的风格 Disable与ReadOnly:完全不可用,不可编辑 WantReturn:按回车直接换行,否则,按Ctrl+回车换行 NoHide Selection:当焦点离开时还能显示选中文字 Align Text:对齐文字(左 中 右) Tab Stop:Tab停顿位置 HelpId:当焦点在这个控件上时,按F1可以弹出改控件的说明(HTML) MultiLine:多行记事本 Password:如果是多行显示就不支持密码风格 Number:只能输入0-9的字符(.和-都不支持) UpperCase:大写英文 LowerCase:小写英文 四、ListCtrl的属性 Always Show Selection:选中项在焦点离开后仍然是显示状态 Border:边缘颜色 EditLabels:点击或按F2可以编辑列表项的文字。 No Column Header:不显示标头 No Sort Header:不排序的标头 Owner Data:虚拟表;海量数据显示功能。(Virtual List) Owner Draw:自绘属性 Share Image Lists:共享图标列表 Single Selection:单选属性 ## 代码区 OnDropFile ====== 循环,(多文件窗口) TCHAR sFile[256]; int nCount = DragQueryFile(hDropInfo, -1 , NULL, 0); int i = 0; while(i < nCount) { DragQueryFile(hDropInfo, i, sFile, _countof(sFile)); } 单文件拖动 三种文件:ANSI UNICODE UTF8 UTF8即属于 UNICODE 也属于窄字符 1.ANSI:多字符集的最早期的文字格式,凡是学过C语言的人都可以读写;(没有文件头字节) 2.Unicode(UTF16):宽字节,包括英文,数字,和符号以及所有国家统统用两个字节并且各国文字统一编码没有重复; 3.UTF-8格式:单字节字符文本,并且各国文字统一编码没有重复。(EF BB BFURF-8) *WideCharToMultiByte的代码页用来标记与新转换的字符串相关的代码页。 *MultiByteToWideChar的代码页用来标记与一个多字节字符串相关的代码页。 一、SendMessage与PostMessage的区别; # 03 Accelerator -- 快捷键 资源添加 ## 日期时间 COleDateTime time = COleDateTime::GetCurrentTime(); CString str = time.Format(_T("%H:%M %Y/%m/%d %W")); CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT1); pEdit->ReplaceSel(str,true);推荐使用 ## 全选 CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT1); pEdit->SetSel(0,-1); ## MFC程序的消息映射机制 a)Win32工程的消息处理机制,就是每个窗口都关联一个全局的消息回调函数。 b)在消息回调函数中,通过对各种不同消息类型识别和分流来相应不同的消息。 c)MFC的消息处理使用全局的回调函数,而是创建一个域窗口关联的派生类,用于消息关联的成员函数来接收和处理窗口的消息。 d)在类向导中选择对应的消息,添加与该消息关联的成员函数来处理该消息,这就是MFC的消息映射机制。 e)在Win32消息处理机制中,每一个消息类型(uMsg)发送到窗口内时,可能在wParam和lParam中携带一些相关的数据。 例如:WM_COMMAND的消息中,在wParam中记录了点击id按钮或者菜单项等的ID号码。而在WM_LBUTTONDOWN的消息中,在lParam中记录了点击界面的(x,y)坐标等等每个Win32消息解析这些附带数据的过程比较繁琐,需要阅读MSDN手册中详细的说明资料 f)MFC的消息应映射机制,一般不需要开发者解析这些复杂的数据,因为消息映射函数中汇自动在参数中将解析好的数据传递过来。例如:OnMouseMove(UINT nFlags CPoint point)函数,再简单参照MSDN说明即可轻而易举地进行消息处理。 # 文件处理 void CShortSoftDlg::OnDropFiles(HDROP hDropInfo) { // TODO: 在此添加消息处理程序代码和/或调用默认值 TCHAR sFile[256]; int nCount = DragQueryFile(hDropInfo, 0, sFile, _countof(sFile)); CFile file;//打开的一般可能是非UNICODE,而你的界面是UNICODE if (!file.Open(sFile, CFile::modeRead)) { //文件在拖动过程中被删掉,或者文件被占用 AfxMessageBox(_T("打开文件失败!请检查文件是否正确!")); return; } if (file.Read(sFile, 2) == 2) { switch(sFile[0]) { case 0xBBEF: ReadUTF8(file); return; case 0xFEFF: ReadUnicode(file); return ; } } ReadAnsi(file); ReadAnsi(file); file.Close(); CDialogEx::OnDropFiles(hDropInfo); } void CShortSoftDlg::ReadUTF8(CFile& file) { file.Seek(3, CFile::begin); LONGLONG nLen = file.GetLength(); char * p = new char [nLen + 1]; nLen = file.Read(p,nLen); p[nLen] = '\0'; TCHAR *pText = new TCHAR[nLen / 2 + 2]; UINT nLen = MultiByteToWideChar(CP_UTF8, NULL, p, -1 , pText, nLen/2 + 2); CString str; SetDlgItemText(IDC_EDIT1, str); delete []p; delete []pText; } void CShortSoftDlg::ReadUnicode(CFile& file) { file.Seek(2, CFile::begin); LONGLONG nLen = file.GetLength(); TCHAR *pText = new TCHAR[nLen / 2 + 1]; nLen = file.Read(pText,nLen); pText[nLen/2] = _T('\0'); SetDlgItemText(IDC_EDIT1, pText); delete []pText; } void CShortSoftDlg::ReadAnsi(CFile& file) { file.Seek(0, CFile::begin); char buff[1024]; UINT nRet = 0;//三种文件:ANSI UNICODE UTF8 CString str; while (nRet = file.Read(buff, sizeof(buff) - 1)) { buff[nRet] = _T('\0'); str += buff; } SetDlgItemText(IDC_EDIT1, str); }