VC/MFC Development
文章平均质量分 85
Eleven
路漫漫其修远兮,吾将上下而求索 ...
展开
-
监控Windows系统音量变化通知
// Header File#pragma once#include <mmdeviceapi.h>#include <endpointvolume.h>#include <corecrt_math.h>typedef void (CALLBACK* PFN_NOTIFYCALLBACK)(DWORD dwVolume, LPVOID lpCo...原创 2019-07-03 09:44:46 · 1990 阅读 · 3 评论 -
VS2008SP1/VS2010上菜单项加速键不响应的问题
// 在resource view中的Menu和Accelerator中定义你的资源//CMainFrame类中定义HACCEL m_hAccel;// CMainFrame类中OnCreate函数加入:m_hAccel = LoadAccelerators(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME));// CMai原创 2012-01-03 07:32:36 · 2174 阅读 · 0 评论 -
在父对话框上创建凹下/凸起的子对话框样式
// 在父对话框窗口上创建凹下或者凸起的子对话框// 子对话框样式Style:Child,Border:NONE风格CNewDlg* pDlg = new CNewDlg;pDlg->Create(IDD_DIALOG1, this);pDlg->ModifyStyleEx(0, WS_EX_DLGMODALFRAME); // 这里是凸起的样式,如果是凹下风格,将这里的WS_EX_DL原创 2012-01-03 06:21:27 · 1674 阅读 · 0 评论 -
Debug模式应用程序输出Debug调试信息
// Debug模式,主要输出一些调试的信息。#ifdef UNICODE #define _FILE_ _STR2WSTR(__FILE__) #define _FUNCTION_ _STR2WSTR(__FUNCTION__)#else #define _FILE_ __FILE__ #define _FUNCTION_ __FUNCTION__#endif#原创 2012-01-19 17:09:51 · 3021 阅读 · 0 评论 -
MDI程序,添加多文档模板,点击New菜单项的时候弹出New对话框要求让用户选择的问题
//在CXXApp类的InitInstance函数中添加一个文档模板CMultiDocTemplate* pDocTemplate; pDocTemplate = new CMultiDocTemplate(IDR_XXXTYPE, RUNTIME_CLASS(CXXXDoc), RUNTIME_CLASS(CChildFrame), // custom MDI child frame原创 2011-11-25 10:56:33 · 5422 阅读 · 15 评论 -
Win32 SDK程序创建一些控件
在Win32 SDK中创建一些控件的时候需要注意一下(具体是哪些控件请参看MSDN文档中列出来的)/* MSDN:Carries information used to load common control classes from the * dynamic-link原创 2011-10-10 10:25:45 · 3359 阅读 · 0 评论 -
窗口截图(二)
窗口截图,可以获取遮挡窗口完整的图像,并保存到bmp文件中去。主要用到的函数中PrintWindow,VC6不支持该函数,请使用VS2008来编译。其它需求如平台要求请参考MSDN文档。void SaveHwndToBmpFile(HWND hWnd, LPCTSTR lps原创 2011-02-25 09:29:00 · 15198 阅读 · 13 评论 -
点击CComboBox控件的下拉按钮控制下拉框ListBox的显示和隐藏
/*The WM_CTLCOLORLISTBOX message is sent to the parent window of a list box before the system draws the list box. By responding to this m原创 2011-09-19 21:42:42 · 5027 阅读 · 0 评论 -
VS2008SP1/VS2010新建的SDI/MDI程序,为菜单项添加ToolTip信息
//在CMainFrame类中添加处理虚函数//virtual BOOL OnMenuButtonToolHitTest(CMFCToolBarButton* pButton, TOOLINFO* pTI);// MSDN: Override this method if原创 2011-09-02 08:34:11 · 3385 阅读 · 0 评论 -
模拟登陆115网盘(MFC版)
// 模拟登陆115网盘#include // 包含相关的头文件/* 用抓包工具抓包可得到需要提交的数据,然后模拟提交即可。*(有的时候需要得到cookie信息,你可以使用CInternetSession::GetCookie()函数得到该cookie信息)原创 2011-08-03 11:11:57 · 18678 阅读 · 26 评论 -
创建TreeView控件,响应NM_CLICK消息得到当前点击的节点的信息(SDK版本)
// 创建TreeView控件case WM_CREATE: { INITCOMMONCONTROLSEX icc = {sizeof(icc), ICC_TREEVIEW_CLASSES}; if(InitCommonControlsEx(&icc))原创 2011-08-01 15:30:42 · 5966 阅读 · 5 评论 -
处理鼠标右键在CListCtrl控件的表头CHeaderCtrl上的响应
// 在CListCtrl控件的父窗口上添加OnNotify虚函数BOOL CXXXDlg::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult) { // TODO: Add your specia原创 2011-07-24 22:11:50 · 3727 阅读 · 0 评论 -
CComboBox控件的下拉列表框,用鼠标在该ListBox上滑动的时候显示出当前具有focus的item项的索引
// 在CComboBox控件的下拉列表中滑动鼠标,会显示当前focus的item项,同时会将对应的item项以蓝色标记出来。通过spy++可以看到父窗口CComboBox控件收到一个WM_CTLCOLORLISTBOX消息。这里示例是得到该item项的索引值,同时将它显示到主对原创 2011-07-21 10:58:27 · 7413 阅读 · 12 评论 -
Win32 SDK程序中拖动Thin边框窗口来改变窗口大小
主要需要添加处理WM_NCHITTEST,WM_SETCURSOR和WM_NCLBUTTONDOWN消息case WM_NCHITTEST: POINT point; point.x = LOWORD(lParam);原创 2011-07-12 15:05:30 · 3332 阅读 · 2 评论 -
模拟双击其它进程窗口中的CListCtrl控件的某一项
<br />之前写过一个模拟点击本进程窗口CListCtrl控件的某一项,请参考这里。<br />HWND hWnd = ::FindWindow(NULL, _T("XXX")); if(hWnd) { HWND hList = ::FindWindowEx(hWnd, NULL, _T("SysListView32"), NULL); if(hList) { DWORD PID = 0; ::GetWindowThreadProcessId(hList, &PI原创 2011-05-08 16:05:00 · 6452 阅读 · 9 评论 -
在对话框上拖动按钮并移动该按钮
// 派生自CButton类,主要过滤WM_LBUTTONDOWN 、WM_LBUTTONUP和WM_MOUSEMOVE消息。BOOL m_bFlag = FALSE; // 成员变量,用来标示鼠标是否按下, 初始化为FALSECPoint m_pt; // 成员变量,用来保存当前坐标值BOOL CXXButton::PreTranslateMessage(MSG* pMsg)原创 2012-01-05 12:47:35 · 4670 阅读 · 0 评论 -
获取其它进程窗口中的状态栏信息
HWND hWnd = ::FindWindow(NULL, _T("XXXXX")); if(NULL == hWnd) { return ; } HWND hWndStatusBar = ::FindWindowEx(hWnd, NULL, _T("msctls_statusbar32"), NULL); if(NULL == hWndStatusBar)原创 2012-02-23 12:03:57 · 3752 阅读 · 5 评论 -
VS2008SP1/VS2010 展开所有菜单下的子菜单项(默认是部分菜单折叠显示)
VS2008SP1/VS2010新建的SDI/MDI窗口默认有些菜单是折叠的,如下图所示:如果要想展开该菜单项的话,可以修改CMainFrame类的OnCreate函数中的代码,里面有这样一段:int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){ if (CMDIFrameWndEx::OnCreate(lpCreat原创 2012-02-27 10:33:16 · 6185 阅读 · 2 评论 -
删除最近几天的LOG记录文件
// Delete Expire Log FilesBOOL DeleteExpireFiles(LPCTSTR lpszFileExt, SYSTEMTIME* pSystemTime, int nReservedDays){ BOOL bRet = FALSE; do { ASSERT(NULL != lpszFileExt); ASSERT(NULL != pSyste...原创 2019-07-03 09:27:21 · 707 阅读 · 0 评论 -
获取EXE文件版本信息(版本格式:xx.xx.xx.xx)
BOOL GetVersion(LPTSTR lpszVersion, size_t nLength, LPCTSTR lpszExecute){ BOOL bRet = FALSE; TCHAR* pVersion = NULL; do { if ((NULL == lpszVersion) || (nLength <= 0) || (NULL == lpszExecut...原创 2018-06-08 10:28:04 · 2697 阅读 · 7 评论 -
监控屏幕背光Brightness变化的通知
MS网站上给出了用Power Shell的方式用来设置/获取Brightness的值。为了方便使用,将相关接口进行了封装:#pragma once#include <initguid.h>#include <cguid.h>#include <atlcomcli.h>#include <atlcoll.h>#include <com...原创 2018-06-06 16:55:53 · 1343 阅读 · 0 评论 -
应用程序版本号比对
BOOL CompareVersion(LPCTSTR lpszVer1, LPCTSTR lpszVer2, int& nResult){ BOOL bRet = FALSE; do { if ((NULL == lpszVer1) || (NULL == lpszVer2)) { break; } // Version: a.b.c.d #define DEFA...原创 2018-05-03 22:24:12 · 681 阅读 · 0 评论 -
登录系统以后,在Windows服务进程中启动需管理员权限(带盾牌图标)的应用程序
// 创建交互式服务安装完成以后,启动UI的程序BOOL LaunchApplication(LPCTSTR lpszExecute, LPCTSTR lpszCmdLine){ BOOL bRet = FALSE; HANDLE hUserTokenDup = NULL; LPVOID pEnv = NULL; do { DWORD dwSessionId = 0; if ...原创 2018-05-08 23:10:17 · 3737 阅读 · 5 评论 -
对话框上右下角显示resize icon(可以拖动改变对话框的大小)
<br />CStatusBar m_StatusBar; // 成员变量// 全局变量static UINT auIDStatusBar[] = { ID_SEPARATOR};//在对话框类的WM_CREATE消息的响应函数OnCreate中加入下面的代码ModifyStyle(0, WS_THICKFRAME);//在对话框类的OnInitDialog()中加入下面的代码 if(m_StatusBar.Create(this)){原创 2011-03-04 15:52:00 · 4489 阅读 · 10 评论 -
字符串编码之间的转换(GB2312<->UTF8<->Unicode)及URLEncoding
LPWSTR GB2312ToUnicode(LPCSTR lpszInBuf){ if(NULL == lpszInBuf) { return NULL; } WCHAR* pBuf = NULL; int nLen = MultiByteToWideChar(CP_ACP, 0, lpszInBuf, -1, pBuf, 0); pBuf = new WCHAR[nLen];原创 2012-10-28 20:49:39 · 5103 阅读 · 6 评论 -
Win32 Dialog对话框处理WM_KEYDOWN事件
MFC中重写虚函数PreTranslateMessage里是可以过滤WM_KEYDOWN消息的。但是如果是Win32 SDK中利用DialogBox/DialogBoxParam创建模态对话框一般行为是不处理WM_KEYDOWN消息的。如果该对话框中没有任何的子控件的话,在对话框的窗口回调函数DlgProc()中是可以过滤到WM_KEYDOWN消息的,不过并不是所有的键的消息都可以捕获到,例如像T原创 2014-12-10 13:22:22 · 5851 阅读 · 6 评论 -
keybd_event函数模拟键盘输入的问题
// keybd_event函数可以模拟键盘输入,但是下面的例子你会发现只能输入字母和数字,对于符号不能输入,// 如果需要输入标点符号,可以参考MSDN上的Virtual-Key Codes表。例如'.'对应VK_OEM_PERIOD。char buf[] = {"Hello, World! 0123456789"}; for(size_t i=0; ; i++) { if(i >=原创 2011-10-20 22:48:24 · 5793 阅读 · 0 评论 -
动态调整对话框属性(去掉标题栏,去掉边框,修改类似成Border:NONE样式)
// 动态修改对话框属性,去掉对话框标题栏,设置Border为NONE属性。if(dlg.GetSafeHwnd()){ dlg.ModifyStyle(WS_CAPTION, 0); // 去掉标题栏 dlg.ModifyStyleEx(WS_EX_DLGMODALFRAME, 0); // 去掉边框 dlg.SetWindowPos(NULL, 0, 0, 0, 0, SWP_NOSI原创 2014-02-20 10:42:01 · 11307 阅读 · 2 评论 -
替换应用程序的图标
替换应用程序exe图标,主要使用的API函数是BeginUpdateResource(),UpdateResource(),EndUpdateResource()来使用自定义的ico文件类替换exe程序原来的图标。// 第一个参数是将要替换图标的exe文件路径,第二个参数是替换的ico文件路径void ReplaceExeIco(LPCTSTR lpszApp, LPCTSTR lpszI原创 2010-07-22 11:32:00 · 5553 阅读 · 4 评论 -
一个简单的将GUI程序的log信息输出到关联的Console窗口中
// .h 文件#pragma onceclass CConsoleDump{public: explicit CConsoleDump(LPCTSTR lpszWindowTitle = NULL); virtual ~CConsoleDump(void);public: BOOL DUMP(LPCTSTR lpszFmt, ...); BOOL Show原创 2012-06-03 19:46:12 · 3117 阅读 · 0 评论 -
Win32 SDK创建RichEdit Control控件
HMODULE hRichEditDll = NULL;WM_CREATE:{ hRichEditDll = LoadLibrary(_T("RICHED20.dll")); HWND hRichEdit = CreateWindowEx(WS_EX_CLIENTEDGE, _T("RichEdit20W"), NULL, WS_CHILD | WS_VISIBLE | W原创 2012-04-19 09:47:41 · 3705 阅读 · 1 评论 -
取消用鼠标拖动或者用键盘在编辑框中选择的文本内容
// 0x0118这个消息是MS未文档化的消息WM_SYSTIMER (caret blink) BOOL CXXDlg::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class CEdit* pEdit = (CEdit*)GetDlgItem原创 2012-03-04 14:30:38 · 2386 阅读 · 5 评论 -
获取CMD命令结果
<br />UINT __cdecl ThreadProc(LPVOID lParam){ HWND hWnd = (HWND)lParam; ASSERT(hWnd); TCHAR szApp[MAX_PATH] = _T("netstat -s"); HANDLE hRead = NULL; HANDLE hWrite = NULL; SECURITY_ATTRIBUTES sa = {0}; sa.nLength = sizeof(sa); sa.lpSecu原创 2011-04-26 21:30:00 · 4834 阅读 · 0 评论 -
支持窗口滚动条控制的类(SDK版)
<br />这里提供一个SDK版的,支持窗口滚动条控制的类,MFC版本和使用方法都请参考这里。<br />// H 文件#pragma onceclass CScrollWnd {public: CScrollWnd(); virtual ~CScrollWnd();public: void Attach(HWND hWnd); void Detach(); void SetSize(int nWidth, int nHeight); const SIZ原创 2011-04-22 13:39:00 · 4722 阅读 · 2 评论 -
Win32 SDK 添加状态栏Status Bar
<br />#include <commctrl.h>#pragma comment(lib, "comctl32.lib")// 在窗口回调函数的WM_CREATE消息中添加如下代码:case WM_CREATE:{ INITCOMMONCONTROLSEX icex;// Ensure that the common control DLL is loaded. icex.dwSize = sizeof(INITCOMMONCONTROLSEX); icex.dwICC原创 2011-04-15 13:51:00 · 3525 阅读 · 2 评论 -
转移当前焦点到另外下一个Tab次序的控件
<br />之前有写个一个关于转移输入焦点的,http://blog.csdn.net/VisualEleven/archive/2010/12/06/6058687.aspx,这里再给出另外一种,之前的那是是直接将焦点转移到指定的控件上(IDCANCEL标示的CButton上),这里给出的是将输入焦点转移到下个Tab次序的控件上。<br /> <br />// 将当前输入焦点转移到下一个Tab顺序的控件上CWnd* pWnd = GetNextDlgTabItem(GetFocus());AS原创 2010-12-28 11:23:00 · 2241 阅读 · 0 评论 -
动态调整CDialogBar的停靠位置
<br />// 在主框架类的CMainFrame的函数中加入最后的代码即可// CDialogBar m_wndMyDialogBar是CMainFrame类的成员变量#define AFX_IDW_DOCKBAR_TOP 0xE81B#define AFX_IDW_DOCKBAR_LEFT 0xE81C#define AFX_IDW_DOCKBAR_RIGHT 0xE81D#define AFX_IDW_DOCKB原创 2010-12-22 11:39:00 · 3409 阅读 · 2 评论 -
Winsock IOCP模型(二)
<br />// IOCP2.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <WinSock2.h>#include <MSWSock.h>#include <Windows.h>#include <process.h>#pragma comment(lib, "WS2_32.lib")#define MAX_BUFFER 256#de原创 2010-12-21 10:30:00 · 14462 阅读 · 24 评论 -
修改MDI工程主框架窗口标题
<br />//在CMainFrame类的PreCreateWindow函数中加入m_strTitle = _T("Hello");cs.style &= ~FWS_ADDTOTITLE;//即可修改主框架窗口的标题。代码如下:BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs){ m_strTitle = _T("Hello"); cs.style &= ~FWS_ADDTOTITLE; if( !CMDIFr原创 2010-10-27 11:15:00 · 2295 阅读 · 2 评论 -
简单的自绘CListBox(二)(多行显示,支持前景色和背景色的变更)
<br />简单的自绘CListBox,支持多行显示和前景色和背景色的更换。下面是相关的H头文件和CPP文件。<br />#if !defined(AFX_MULITLINELISTBOX_H__D705CB99_9FD0_424E_BD71_027547449AE5__INCLUDED_)#define AFX_MULITLINELISTBOX_H__D705CB99_9FD0_424E_BD71_027547449AE5__INCLUDED_#if _MSC_VER > 1000#pra原创 2010-12-13 08:50:00 · 10025 阅读 · 10 评论