FAQ整理(不断添加中)
来源:互联网 发布:淘宝好评不返现怎么办 编辑:程序博客网 时间:2024/05/18 00:20
本文来自:http://hi.baidu.com/lbird/blog/item/a0cf8d50d1631762843524fd.html
FAQ1: VC7中,如何在非MFC中如何使用CString
-- 包含头文件 atlstr.h 即可,需要用到ATL
FAQ2: 检查某键是否被按下
-- if( GetKeyState(VK_LSHIFT) < 0 ) 表示被按下
FAQ3: 隐藏对话框
-- 当你使用有模式对话框时最开始是无法隐藏窗口的,而只能在对话框显示后再隐藏窗口,所以这会造成屏幕的闪烁。一个解决办法就是采用无模式的对话框,
无模式的对话框在创建后是隐藏的,直到你调用ShowWindow(SW_SHOW)才会显示
其实可以用一种方法隐藏模式对话框:
::SetWindowLong(GetSafeHwnd(), GWL_EXSTYLE, WS_EX_TOOLWINDOW);
::MoveWindow(AfxGetMainWnd()->m_hWnd,0,0,0,0,FALSE);
要创建对话框时不在任务栏显示按钮:
ModifyStyleEx(WS_EX_APPWINDOW, WS_EX_TOOLWINDOW, SWP_DRAWFRAME);
FAQ4: 在源文件中定位光标到对称的#if, #endif,使用Ctrl+K.
FAQ5: 手工编译纯资源成dll
-- Rc.exe /v data.rc
Cvtres.exe /machine:ix86 data.res
Link /SUBSYSTEM:WINDOWS /DLL /NOENTRY data.res ;编译成DLL文件
这种方式创建的DLL是最小的,比起你用Win 32 Dynamic Libray等产生的更小。
FAQ6: 如何在OLE_COLOR与COLOR之间转换
-- OLE_COLOR ocBack = GetBackColor();
// Convert OLE_COLOR to COLORREF
COLORREF clrBack = OleTranslateColor(ocBack);
// Convert COLORREF to OLE_COLOR
OLE_COLOR ocConverted = (OLE_COLOR)clrBack;
FAQ7: Win98不能使用的UNICODE字符处理函数
-- lstrcpyW - 取代函数:ATL提供的ocscpy
CharNextW - 取代函数: ATL提供的CharNextO
Win98和2000都可以使用的:
lstrlenW
C运行库内处理UNICODE的函数(即以wcs开头的)
FAQ8: WM_NCCALCSIZE消息
-- 当窗口的位置和大小发生改变时,窗口会收到此消息。通过处理此消息,程序可以控制窗口客户区的大小。
fCalcValidRects = (BOOL) wParam; 有效区域标志
lpncsp = (LPNCCALCSIZE_PARAMS) lParam; // size calculation data 或
lpncsp = (LPRECT) lParam; // new window coordinates
wParam为真表示程序应该指定窗口客户区有效部分。
当wParam为真时,lParam是指向一个NCCALCSIZE_PARAMS结构的指针。这个结构包含程序可以计算窗口客户区大小和位置的
信息。当wParam为假时,lParam指向一个RECT结构指针,该结构在处理前包含原本窗口客户区的区域,在返回前,可以
修改这个结构的值以表示窗口客户区的屏幕区域。
详细可以参考VCKBASE的:http://www.vckbase.com/document/viewdoc/?id=1302#创建客户窗口
注:当窗口大小改变时,在处理该消息时,调用GetWindowRect不能得到改变后的窗口大小!!
处理消息时的RECT是基于屏幕坐标
FAQ9: 重载下标操作符 [] 的正确方法
-- 重载下标操作符 [] 是很常见的事情,它保存类中元素的顺序。vector 和 string 就是这样的类。在重载操作符[]时,一定要记住定义它的两个版本:非常量版本和常量版本:
class MyString
{
private:
char * buff;
int size;
public:
//...
char& operator [] (int index) { return buff[index]; } // 非常量版本
const char& operator [] (int index) const { return buff[index]; } // 常量版本
};
当对象本身是常量时,下标操作符的常量版本被调用。
void f(const MyString& str)
{
char c = str[0]; // 调用const char& operator [] (int index) const
}
FAQ10: 如何打开软键盘
-- // m_hWnd 是接受软键盘输入的窗口句柄
ImmSimulateHotKey(m_hWnd, IME_CHOTKEY_IME_NONIME_TOGGLE);
HIMC hIMC = ImmGetContext(m_hWnd);
DWORD dwConv, dwSent;
DWORD dwTemp;
ImmGetConversionStatus(hIMC,&dwConv,&dwSent);
//dwConv |= IME_CMODE_SOFTKBD;
if (dwConv & IME_CMODE_SOFTKBD)
dwConv &= ~IME_CMODE_SOFTKBD;
else
dwConv |= IME_CMODE_SOFTKBD;
ImmSetConversionStatus(hIMC,dwConv,dwSent);
ImmReleaseContext(m_hWnd,hIMC);
说明:这种方法打开的软键盘,必须先打开某个输入法,即软键盘是基于输入法的。
而且无法更多的控制软键盘,比如移动软键盘的位置。
FAQ11: 如何检查是否连接到网络
-- DWORD dwFlag = 0 ;
if( !InternetGetConnectedState( &dwFlag , 0 ) )
{
// 无法连接到网络
}
如果函数成功返回,dwFlag可以获得当前网络的类型,如LAN或拨号
FAQ12: Tree Ctrl 的check box为什么不能工作?
-- 即使设置了TVS_CHECKBOXES风格,在WM_INITDIALOG里调用 SetCheck(true) 仍然没有出现预期的效果,(WTL下用SetCheckState)。原因可能是 WM_INITDIALOG 时,状态图标没有被加载,虽然设置了状态,但没有显示出来。解决方法,在调用 SetCheck 前先调用下面两行代码:
Tree.ModifyStyle( TVS_CHECKBOXES, 0 ) ;
Tree.ModifyStyle( 0 , TVS_CHECKBOXES ) ;
FAQ13: check box风格的Tree Ctrl 如何响应用户点击check box的消息?
-- NM_CLICK , 代码如下:
CPoint pt;
GetCursorPos(&pt);
pTree->ScreenToClient(&pt);
UINT flag;
HTREEITEM hItem = pTree->HitTest(pt,&flag);
if( hItem && flag == TVHT_ONITEMSTATEICON )
{
// 鼠标点击了 check box
}
注意:如果不想使用tree的默认处理,函数应该返回1,但最好自已调SetCheck反选。
FAQ14: 判断当前系统是否从安全模式引导
GetSystemMetrics(SM_CLEANBOOT) ;
FAQ15: 进程自杀
char filePath[MAX_PATH]={0};
GetModuleFileName(hinstance, filePath, MAX_PATH);
__asm
{
lea eax, filePath
push 0
push 0
push eax
push ExitProcess
push g_instance
push DeleteFile
push FreeLibrary
ret
}
FAQ16: 如何把文件放入回收站
SHFILEOPSTRUCT Oper ;
memset( &Oper, 0, sizeof(SHFILEOPSTRUCT)) ;
Oper.wFunc = FO_DELETE ;
Oper.pFrom = lpszFilePath ;
Oper.fFlags = FOF_ALLOWUNDO ; // 没有这行直接删除
SHFileOperation(&Oper) ;
FAQ17:如何把某个路径添加到进程环境变量中
void AddCurrentPath(void)
{
const int MAX_BUFFER = 2048 ;
TCHAR szPath [MAX_BUFFER] ;
memset( szPath, 0, sizeof(szPath) ) ;
if (GetEnvironmentVariable( _T("path"), szPath, MAX_BUFFER )==0)
{
SetEnvironmentVariable( _T("path"), _CurrentPath ) ;
}
else
{
int size = lstrlen(szPath) + lstrlen(_CurrentPath) + 1 ;
if ( size<MAX_BUFFER && _tcsstr(szPath, _CurrentPath)==NULL )
{
lstrcat( szPath , _T(";") ) ;
lstrcat( szPath , (_CurrentPath) ;
SetEnvironmentVariable( _T("path"), szPath ) ;
}
}
}
FAQ18:目录选择对话框
CString CMyDlg::ShowSelectDirectoryDlg(const CString & strDlgTitle)
{
char szDir[MAX_PATH];
BROWSEINFO bi;
ITEMIDLIST *pidl;
bi.hwndOwner = m_hWnd;
bi.pidlRoot = NULL;
bi.pszDisplayName = szDir;
bi.lpszTitle = strDlgTitle;
bi.ulFlags = BIF_RETURNONLYFSDIRS;
bi.lpfn = NULL;
bi.lParam = 0;
bi.iImage = 0;
pidl = SHBrowseForFolder(&bi);
if(pidl == NULL) return _T("");
if(!SHGetPathFromIDList(pidl, szDir)) return _T("");
return CString(szDir);
}
- FAQ整理(不断添加中)
- FAQ整理(不断添加中)
- WTL FAQ(不断添加中)
- astgo常见问题(FAQ)知识库(不断整理更新中...)
- 阿斯特astgo的常见问题(FAQ)知识库_不断整理更新中
- ajax 学习资料(不断整理中)
- 学习笔记(不断整理更新中)
- ACM术语(不断整理中)
- Hibernate事务管理读书笔记(不断添加中)
- STL用法点滴(不断添加中)
- mysql常用命令(不断添加中...)
- c#笔记(不断添加中)
- excel技巧总结(不断添加中........)
- OSGi命令(不断添加中)
- Mongodb中FAQ整理
- mysql常用命令(不断整理中)
- 实用工具推荐,不断整理中......
- VS2008使用过程中问题汇总(不断整理中...)
- 历数昔日互联网霸主雅虎四大方向错误
- C语言宏定义技巧(常用宏定义)
- 美电影巨头起诉迅雷 索赔700万版权赔偿
- 解决Xmanager登陆HP_unix界面乱码问题的方法
- WPF中取得预定义颜色
- FAQ整理(不断添加中)
- 中国铁道部应对雪灾失措挨轰击
- 未来的it界需要概念研发
- 开始编译 linux内核
- 关于Flex及AS3的百多条小小知识
- ARM入门文章_1
- sizeof
- Oracle 解锁问题
- 2007 开发语言技术回顾