[MFC] 记录工作中常用的琐碎知识点
来源:互联网 发布:大数据概念板块 编辑:程序博客网 时间:2024/05/11 03:43
这篇博客会持续更新 记录常用到的知识点 内容也会很杂
当class或struct中 含有STL对象时(比如vector或map)不要对创建的对象做memset或ZeroMemory操作 否则就等着崩溃吧
如果class中有虚函数 也不要对类对象做memset或ZeroMemory操作(虚表指针会一并被清零)当调用虚函数时就等着崩溃吧
三种前置窗口的方法:
::SetForegroundWindow(hWnd);::BringWindowToTop(hWnd); ::SetWindowPos(hWnd, HWND_TOPMOST, rtClient.left, rtClient.top, rtClient.Width(), rtClient.Height(), SWP_SHOWWINDOW); // 缺点:窗口会始终在顶层
如果不调有什么后果?WM_PAINT消息就不会从消息队列中移除 其响应函数OnPaint会一直被调用 注意:CPainDC只能在WM_PAINT的响应函数中中使用
GetMessage会阻塞、PeekMessage不会阻塞
获取鼠标所在的窗口句柄:
CPoint pt;GetCursorPos(&pt); // 屏幕坐标HWND hHitWnd = ::WindowFromPoint(pt);
遍历指定窗口的子窗口:
void TravalChildWnd(HWND hParent){HWND hChild = ::GetWindow(hParent, GW_CHILD);while (hChild && ::IsWindow(hChild)){// 遍历出一个子窗口 : hChild TravalChildWnd(hChild); // 递归遍历hChild = ::GetNextWindow(hChild);}}
判断指定窗口是否是顶层窗口 & 获取指定窗口的顶层窗口:
bool IsTopWindow(HWND hWnd){long Style = ::GetWindowLong(hWnd, GWL_STYLE);return bool(Style & WS_POPUP);}HWND GetTopHwnd(HWND hWnd){HWND hTop = 0; HWND hTemp = hWnd;while (::IsWindow(hTemp)){hTop = hTemp;hTemp = ::GetParent(hTemp);if (IsTopWindow(hTemp))break;}return hTop;}
获取CEdit中选中的文本:
CString CMyDialog::GetSelectString(){CString txt;m_EditMsg.GetWindowText(txt);int nStart, nEnd;m_EditMsg.GetSel(nStart, nEnd); std::wstring str = txt.GetBuffer();CString ret = str.substr(nStart, nEnd - nStart).c_str();return ret;}
判断 shift ctrl alt 是否按下了:
BOOL IsCtrlPressed() { return ((GetKeyState(VK_CONTROL) & (1<<(sizeof(SHORT)*8-1))) != 0);}BOOL IsAltPressed() { return ((GetKeyState(VK_MENU) & (1<<(sizeof(SHORT)*8-1))) != 0);}BOOL IsShiftPressed() { return ((GetKeyState(VK_SHIFT) & (1<<(sizeof(SHORT)*8-1))) != 0);}
在任务栏点击窗口图标 实现窗口的最小化和恢复:
ModifyStyle(0, WS_MINIMIZEBOX);
判断滚动条是否已经滚到了末尾:
SCROLLINFO si = {}; si.cbSize = sizeof(si); si.fMask = SIF_ALL; GetScrollInfo(SB_VERT, &si); if ((si.nPos + si.nPage) > (si.nMax + 1)) { return TRUE; }
选择保存路径:
BOOL OnBroser(){ BROWSEINFO bi; bi.hwndOwner = *this; bi.pidlRoot = NULL; bi.pszDisplayName = NULL; bi.lpszTitle = _T("Set Save Path"); bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT; bi.lpfn = NULL; bi.lParam = 0; bi.iImage = 0; LPITEMIDLIST pidl = SHBrowseForFolder(&bi); if (pidl == NULL) return FALSE; TCHAR pszPath[MAX_PATH + 1] = {}; if (SHGetPathFromIDList(pidl, pszPath)) m_btnShowPath.SetWindowText(pszPath); // pszPath就是选中的到处路径 return TRUE;}
最大化窗口 且不遮挡任务栏:
CRect rt;SystemParametersInfo(SPI_GETWORKAREA, 0, &rt, 0);int cx = GetSystemMetrics(SM_CXFULLSCREEN);int cy = rt.bottom;::MoveWindow(HWND, 0, 0, cx, cy, TRUE);
获取CListCtrl选中行:
int selectindex = m_list.GetNextItem(-1,LVNI_ALL | LVNI_SELECTED);
让列表框的滚动条 移动到底部:
m_list_log.PostMessage(WM_VSCROLL,SB_LINERIGHT,0);
CPoint转LPARAM: MAKELPARAM(point.x, point.y)
LPARAM转CPoint: GET_X_LPARAM 、GET_Y_LPARAM
判断指定的文件是否存在:
if (-1 != GetFileAttributes("C://erverFile")) { printf("指定文件存在 \n"); }
获取UNIX时间戳:
uint64 GetNowUnixTime(){ union { long long ns100; FILETIME ft; } now; GetSystemTimeAsFileTime (&now.ft); return (now.ns100 - 116444736000000000) / 10000;}
windows原子操作函数:
#include<windows.h>long InterlockedIncrement(long volatile* Addend); // 返回新值long InterlockedDecrement(long volatile* Addend); // 返回新值long InterlockedExchangeAdd(long volatile* Addend, long Value); // 增加指定值 返回原始值long InterlockedExchange(long volatile* Target, long Value); // 替换值 返回原始值
获取exe所在路径的目录:
const WCHAR* GetExeDir(){ static WCHAR s_szFilePath[MAX_PATH] = {};if (wcslen(s_szFilePath) > 0)return s_szFilePath;GetModuleFileNameW(NULL, s_szFilePath, MAX_PATH); int nLen = (int)wcslen(s_szFilePath);for (int i = nLen - 1; i >= 0; --i){if (s_szFilePath[i] == '\\'){s_szFilePath[i + 1] = 0;break;}}return s_szFilePath;}
0 0
- [MFC] 记录工作中常用的琐碎知识点
- MFC 琐碎知识点
- 工作中积累的琐碎
- 琐碎知识点记录
- 笔记中琐碎的知识点一
- C++琐碎小知识点记录
- Android的琐碎知识点
- 琐碎的知识点
- javascript琐碎的知识点
- java琐碎的知识点
- 琐碎的知识点纪要
- 关于工作的琐碎
- Android琐碎知识点,不断更新中
- 琐碎的问题解决记录
- 面试中常见的琐碎知识点(三)
- 记录工作中比较常用的命令
- 工作中的数据库琐碎知识点积累_winvay
- SQL查询的琐碎知识点
- 异步下载网络图片并保存
- CentOS安装Python2.7
- PX4-Pixhawk-开发环境搭建
- excel中数据导入到mysql数据库
- 进程和现成相关知识积累查找
- [MFC] 记录工作中常用的琐碎知识点
- 关于matlab中get和set的用法(转)
- 谈谈对Spring IOC的理解
- 管理器点击浏览时出现Service Unavailable
- C++第四次实验-函数-项目2(奇偶阶乘)
- Circular Queue
- R语言中的机器学习
- 自定制ProgressView
- 如何把字符串转换成整数