Programming Technology

VC下将位图存为BMP文件(Save CBitmap to file)

从The Code Project上找到的代码,也不容易的

代码声明:

  1. /**************************************************
  2.  * CBitmap To File Function
  3.  * 参数:
  4.  * pWnd - 窗体指针
  5.  * cb - 所要存储的CBitmap对象
  6.  * name - 所要存储的文件名
  7.  **************************************************/
  8. BOOL WriteBMPtoFile( CWnd* pWnd, CBitmap& cb,CString name );
  9.  
  10. //另外两个函数(不需要自己调用)
  11. HANDLE DDBToDIB( CBitmap& bitmap, DWORD dwCompression, CPalette* pPal );
  12. BOOL WriteDIB( LPTSTR szFile, HANDLE hDIB );

 (查看全文)

VC下动态改变菜单显示的标题和Checked状态(Change title of CMenu and Checked)

曾经为这个一度苦闷,终于有一天找到了...估计不是最合理的办法
使用ModifyMenu函数,原型如下:

  1. /***************************************************
  2.  * 4个参数:
  3.  * nPosition       - 旧菜单的资源ID或位置(根据nFlags取值)
  4.  * nFlags           - MF_BYCOMMAND or MF_BYPOSITION 前者用资源ID标识,后者用位置标识
  5.  * nIDNewItem  - 设置菜单为新的资源ID或新的位置(根据nFlags取值)
  6.  * lpszNewItem - 菜单所显示字符串
  7.  ***************************************************/
  8. BOOL ModifyMenu( UINT nPosition, UINT nFlags,
  9.         UINT nIDNewItem = 0, LPCTSTR lpszNewItem = NULL );

 (查看全文)

VC下添加和删除自己系统托盘图标,及托盘事件的响应

添加和删除系统托盘图标:

  1. //需要添加一个成员变量
  2. NOTIFYICONDATA m_nd; //NOTIFYICONDATA结构
  3.  
  4. /***************************************
  5.  * 将图标加入系统托盘
  6.  * 参数:
  7.  * hWnd - 窗体句柄
  8.  * hIcon  - 所要加入的图标句柄
  9.  * title     - 悬停于系统托盘之上时所要显示的消息
  10.  * uCallbackMessage - 消息标识(需用户自己定义消息)
  11.  ***************************************/
  12. void CMyDlg::AddIcon(HWND hWnd, HICON hIcon, UINT uCallbackMessage, char *title)
  13. {
  14.         m_nd.cbSize = sizeof(NOTIFYICONDATA);
  15.         m_nd.hWnd = hWnd;
  16.         m_nd.uID = IDR_MAINFRAME;
  17.         m_nd.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
  18.         m_nd.uCallbackMessage = uCallbackMessage;
  19.         m_nd.hIcon = hIcon;
  20.         strcpy(m_nd.szTip, title);
  21.         Shell_NotifyIcon(NIM_ADD, &m_nd);       //加入图标
  22. }
  23.  
  24. //删除系统托盘图标
  25. void CMyDlg::RemoveIcon()
  26. {
  27.         Shell_NotifyIcon(NIM_DELETE, &m_nd);
  28. }

 (查看全文)

VC下复制位图到剪切板(Copy CBitBmp To ClipBoard)

简单的调用几个函数就可以了:

  1. void CMyFun::CopyBmpToClipBoard(HBITMAP hBitmap)
  2. {
  3.         OpenClipboard();        //打开剪贴板
  4.         EmptyClipboard();       //清空剪切板
  5.         SetClipboardData(CF_BITMAP, hBitmap);   //将位图拷到剪贴板上
  6.         CloseClipboard();       //关闭剪贴板
  7. }

 (查看全文)

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.

  1. //函数原型:
  2. BOOL RegisterHotKey(
  3.   HWND hWnd,         // window to receive hot-key notification
  4.   int id,            // identifier of hot key
  5.   UINT fsModifiers,  // key-modifier flags
  6.   UINT vk            // virtual-key code
  7. );


 (查看全文)

XP环境在VC6.0下使程序直接具有XP风格(XP style)

XP环境在VC6.0下使程序直接具有XP风格(无外带文件,绿色)
如果希望在VC2005下使程序具有XP风格,请点击这里
步骤:
1.Insert----Resourse----Custom
2.Resourse Type:24----OK
3.Insert 24 一个资源----资源名字为"1"
4.在这个名为"1"的资源,写入如下代码

 (查看全文)

VC下实现窗体透明效果(clarity for CDialog)

VC下实现窗体透明效果,我只测试了CStatic是不可以实现这个效果的,应该是只有CWnd子类才可以实现这个效果,如果想使用空间透明化,只能把他放窗体上了....
20%透明效果如下图:
20%透明窗体演示
 (查看全文)

VC下CSocket非阻塞方式下的连接框架

CSocket非阻塞方式(不用自己建立线程)

1.服务端
应用非阻塞方式需要自己声明一个类继承CSokcet类

  1. // MySocket.h : header file
  2. class CMySocket : public CSocket
  3. {
  4. // Attributes
  5. public:
  6.         CServerDlg* m_pServerDlg;       //主窗口指针
  7. // Operations
  8. public:
  9.         CMySocket();
  10.         virtual ~CMySocket();
  11.  
  12. // Overrides
  13. public:
  14.         // ClassWizard generated virtual function overrides
  15.         //{{AFX_VIRTUAL(CMySocket)
  16.         public:
  17.         virtual void OnAccept(int nErrorCode)//当准备连接时,系统调用
  18.         virtual void OnReceive(int nErrorCode)//当准备接受消息时,系统调用
  19.         //}}AFX_VIRTUAL
  20.  
  21.         // Generated message map functions
  22.         //{{AFX_MSG(CMySocket)
  23.                 // NOTE - the ClassWizard will add and remove member functions here.
  24.         //}}AFX_MSG
  25.  
  26. // Implementation
  27. protected:
  28.  
  29. };

 (查看全文)

[网络转载]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

 (查看全文)