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%透明效果如下图:
