VC下给CDialog添加加速键(Add accelerators)

作者:Wupei  |  发表时间:  |  所属分类:VC

为CDialog添加加速键:

//在头文件声明成员变量
HACCEL m_hAccelTable;

//在构造函数中调用函数,加入加速键
CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CMyDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CMyDlg)
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

	//加速键
	m_hAccelTable = ::LoadAccelerators(AfxGetInstanceHandle(),
		MAKEINTRESOURCE(IDR_ACCELERATOR)); //加速键的资源ID
}

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

作者:Wupei  |  发表时间:  |  所属分类:VC

从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)

作者:Wupei  |  发表时间:  |  所属分类:VC

曾经为这个一度苦闷,终于有一天找到了…估计不是最合理的办法
使用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下添加和删除自己系统托盘图标,及托盘事件的响应

作者:Wupei  |  发表时间:  |  所属分类: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下CSocket非阻塞方式下的连接框架

作者:Wupei  |  发表时间:  |  所属分类:VC

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:

};