VC下将位图存为BMP文件(Save CBitmap to file)
从The Code Project上找到的代码,也不容易的
代码声明:
- /**************************************************
- * CBitmap To File Function
- * 参数:
- * pWnd - 窗体指针
- * cb - 所要存储的CBitmap对象
- * name - 所要存储的文件名
- **************************************************/
- BOOL WriteBMPtoFile( CWnd* pWnd, CBitmap& cb,CString name );
- //另外两个函数(不需要自己调用)
- HANDLE DDBToDIB( CBitmap& bitmap, DWORD dwCompression, CPalette* pPal );
- BOOL WriteDIB( LPTSTR szFile, HANDLE hDIB );
VC下动态改变菜单显示的标题和Checked状态(Change title of CMenu and Checked)
曾经为这个一度苦闷,终于有一天找到了...估计不是最合理的办法
使用ModifyMenu函数,原型如下:
- /***************************************************
- * 4个参数:
- * nPosition - 旧菜单的资源ID或位置(根据nFlags取值)
- * nFlags - MF_BYCOMMAND or MF_BYPOSITION 前者用资源ID标识,后者用位置标识
- * nIDNewItem - 设置菜单为新的资源ID或新的位置(根据nFlags取值)
- * lpszNewItem - 菜单所显示字符串
- ***************************************************/
- BOOL ModifyMenu( UINT nPosition, UINT nFlags,
- UINT nIDNewItem = 0, LPCTSTR lpszNewItem = NULL );
VC下添加和删除自己系统托盘图标,及托盘事件的响应
添加和删除系统托盘图标:
- //需要添加一个成员变量
- NOTIFYICONDATA m_nd; //NOTIFYICONDATA结构
- /***************************************
- * 将图标加入系统托盘
- * 参数:
- * hWnd - 窗体句柄
- * hIcon - 所要加入的图标句柄
- * title - 悬停于系统托盘之上时所要显示的消息
- * uCallbackMessage - 消息标识(需用户自己定义消息)
- ***************************************/
- void CMyDlg::AddIcon(HWND hWnd, HICON hIcon, UINT uCallbackMessage, char *title)
- {
- m_nd.cbSize = sizeof(NOTIFYICONDATA);
- m_nd.hWnd = hWnd;
- m_nd.uID = IDR_MAINFRAME;
- m_nd.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
- m_nd.uCallbackMessage = uCallbackMessage;
- m_nd.hIcon = hIcon;
- strcpy(m_nd.szTip, title);
- Shell_NotifyIcon(NIM_ADD, &m_nd); //加入图标
- }
- //删除系统托盘图标
- void CMyDlg::RemoveIcon()
- {
- Shell_NotifyIcon(NIM_DELETE, &m_nd);
- }
VC下复制位图到剪切板(Copy CBitBmp To ClipBoard)
简单的调用几个函数就可以了:
- void CMyFun::CopyBmpToClipBoard(HBITMAP hBitmap)
- {
- OpenClipboard(); //打开剪贴板
- EmptyClipboard(); //清空剪切板
- SetClipboardData(CF_BITMAP, hBitmap); //将位图拷到剪贴板上
- CloseClipboard(); //关闭剪贴板
- }
VC下截取当前屏幕的函数(Function of copy screen)
MFC中就有截取屏幕的相关函数:
ScrDC.CreateDC("DISPLAY", NULL, NULL, NULL);
具体函数如下:
(查看全文)
VC下简易实现全局热键--无DLL无钩子(Register HotKey)
使用RegisterHotKey()函数即可.
MSDN:The RegisterHotKey function defines a system-wide hot key.
- //函数原型:
- BOOL RegisterHotKey(
- HWND hWnd, // window to receive hot-key notification
- int id, // identifier of hot key
- UINT fsModifiers, // key-modifier flags
- UINT vk // virtual-key code
- );
XP环境在VC6.0下使程序直接具有XP风格(XP style)
VC下实现窗体透明效果(clarity for CDialog)
VC下实现窗体透明效果,我只测试了CStatic是不可以实现这个效果的,应该是只有CWnd子类才可以实现这个效果,如果想使用空间透明化,只能把他放窗体上了....
20%透明效果如下图:
(查看全文)
VC下CSocket非阻塞方式下的连接框架
CSocket非阻塞方式(不用自己建立线程)
1.服务端
应用非阻塞方式需要自己声明一个类继承CSokcet类
- // MySocket.h : header file
- class CMySocket : public CSocket
- {
- // Attributes
- public:
- CServerDlg* m_pServerDlg; //主窗口指针
- // Operations
- public:
- CMySocket();
- virtual ~CMySocket();
- // Overrides
- public:
- // ClassWizard generated virtual function overrides
- //{{AFX_VIRTUAL(CMySocket)
- public:
- virtual void OnAccept(int nErrorCode); //当准备连接时,系统调用
- virtual void OnReceive(int nErrorCode); //当准备接受消息时,系统调用
- //}}AFX_VIRTUAL
- // Generated message map functions
- //{{AFX_MSG(CMySocket)
- // NOTE - the ClassWizard will add and remove member functions here.
- //}}AFX_MSG
- // Implementation
- protected:
- };
[网络转载]VC下内存泄露检测与CListCtrl使用技巧(全)
VC下内存泄漏检测:
c++中检测内存泄漏可以引入系统定义的宏来查看,内存在哪个位置泄漏
文件开始处加入下列定义
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
程序退出时加入以下函数:
_CrtDumpMemoryLeaks();
如果有泄漏会显示
e:myprojectmltithrd.14mltithrd.cpp(95) : {68} client block at 0x00372550, subtype c0, 144 bytes long.
a CMultiDocTemplate object at $00372550, 144 bytes long





