VC下使CDialog响应键盘按键(Response of Key)
需要重载PreTranslateMessage函数
具体实现:
需要重载PreTranslateMessage函数
具体实现:
为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 }
从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 );
曾经为这个一度苦闷,终于有一天找到了…估计不是最合理的办法
使用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 );
添加和删除系统托盘图标:
//需要添加一个成员变量 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); }
简单的调用几个函数就可以了:
void CMyFun::CopyBmpToClipBoard(HBITMAP hBitmap) { OpenClipboard(); //打开剪贴板 EmptyClipboard(); //清空剪切板 SetClipboardData(CF_BITMAP, hBitmap); //将位图拷到剪贴板上 CloseClipboard(); //关闭剪贴板 }
MFC中就有截取屏幕的相关函数:
ScrDC.CreateDC(“DISPLAY”, NULL, NULL, NULL);
具体函数如下:
使用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风格(无外带文件,绿色)
如果希望在VC2005下使程序具有XP风格,请点击这里
步骤:
1.Insert—-Resourse—-Custom
2.Resourse Type:24—-OK
3.Insert 24 一个资源—-资源名字为”1″
4.在这个名为”1″的资源,写入如下代码
VC下实现窗体透明效果,我只测试了CStatic是不可以实现这个效果的,应该是只有CWnd子类才可以实现这个效果,如果想使用空间透明化,只能把他放窗体上了….
20%透明效果如下图: