VC 小技巧
来源:互联网 发布:淘宝网飞利浦剃须刀 编辑:程序博客网 时间:2024/06/05 02:36
1、VC++中 WM_QUERYENDSESSION WM_ENDSESSION 为系统关机消息。
2、让程序暂停:system("PAUSE");
3、在PreTranslateMessage中捕捉键盘事件
if (pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN)return TRUE; //注意return的值
4、更改按键消息(下面的代码可把回车键消息改为TAB键消息)
-------------------------------------------------------
BOOL CT3Dlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message == WM_KEYDOWN && VK_RETURN == pMsg->wParam)
{
pMsg->wParam = VK_TAB;
}
return CDialog::PreTranslateMessage(pMsg);
}
------------------------------------------
5、 隐藏桌面图标并禁用右键功能菜单:
------------------------------------
HWND Hwd = ::FindWindow("Progman", NULL);
if (bShowed)
::ShowWindow(Hwd, SW_HIDE);
else
::ShowWindow(Hwd, SW_SHOW);
bShowed = !bShowed;
---------------------------------------
6、复制文件应该用到CopyFile或是CopyFileEx这两个API
7、SendMessage函数的几个用法:
控制按钮按下的,是这么用的
SendMessage(n1, WM_COMMAND, MAKELPARAM(ID,BN_CLICKED),(LPARAM )n2); (n1,n2是句柄)
而得到文本内容,是这样用的,
SendMessage(hWnd,WM_GETTEXT,10,(LPARAM)buf),
8、处理一个单行EDIT的WM_CTLCOLOR要同时响应nCtlColor = CTLCOLOR_EDIT和CTLCOLOR_MSGBOX的两个情况,参考http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_mfc_cwnd.3a3a.onctlcolor.asp
9、数组初始化:
int a[24][34]; //声明数组
memset(a,-1,24*34); //全部元素初始化成-1,但初始化成除0和-1以外的数值是不行的
10、创建一个控件:
HWND hEdit=CreateWindow("EDIT",NULL,WS_CHILD|WS_VISIBLE |ES_LEFT,50,20,50,20,hwnd,NULL,hInst,NULL); //hwnd参数为父窗口句柄
11、调用其它程序又要隐藏窗口:用CreateProcess函数调用,再拿到窗口句柄,然后::ShowWindow(hWnd,SW_HIDE);
12、日期到字符串:
--------------------------------------------------
SYSTEMTIME sys;
GetSystemTime(&sys);
char str[100];
sprintf(str,"%d%d%d_%d%d%d",sys.wYear,sys.wMonth,sys.wDay,sys.wHour+8,sys.wMinute,sys.wSecond);
//这里的小时数注意它的0:00点是早上8:00,所以要加上8,因为这是格林威治时间,换成我国时区要加8
--------------------------------------------------
CString m_strTemp;
SYSTEMTIME systemtime;
GetLocalTime(&systemtime); //这个函数可获得毫秒级的当前时间
m_strTemp.Format("%d年%d月%d日%d:%d:%d:%d 星期%d",systemtime.wYear,systemtime.wMonth,systemtime.wDay,systemtime.wHour,systemtime.wMinute,systemtime.wSecond,systemtime.wMilliseconds,systemtime.wDayOfWeek);
--------------------------------------------------
13、任务栏上的图标闪烁:
The FlashWindow function flashes the specified window once, whereas the FlashWindowEx function flashes a specified number of times.
BOOL FlashWindow(
HWND hWnd, // handle to window to flash
BOOL bInvert // flash status
);//闪烁一次
FlashWindowEx()//闪烁多次
14、在一个由汉字组成的字符串里,由于一个汉字由两个字节组成,怎样判断其中一个字节是汉字的第一个字节,还是第二个字节,使用IsDBCSLeadByte函数能够判断一个字符是否是双字的第一个字节,试试看:)
_ismbslead
_ismbstrail
15、如何实现对话框面板上的控件随着对话框大小变化自动调整
在OnSize中依其比例用MoveWindow同等缩放.http://www.codeproject.com/dialog/dlgresizearticle.asp
16、给你的程序加上splash:http://www.vckbase.com/document/finddoc.asp?keyword=splash
如何添加闪屏:Project->Add to Project->Components and Controls->Gallery\\Visual C++ Components->Splash screen
17、得到CListCtrl控件点击事件时点击的位置:
-----------------------------------------------
void CTest6Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
if(pNMListView->iItem != -1)
{
CString strtemp;
strtemp.Format("单击的是第%d行第%d列",
pNMListView->iItem, pNMListView->iSubItem);
AfxMessageBox(strtemp);
}
*pResult = 0;
}
------------------------------------------------
18、 如何在VC中操纵word:http://www.vckbase.com/document/viewdoc/?id=1174
19、消息传递中pMSG中一些参数的意义:
hwnd-------接收消息的窗口句柄;
message----发送的消息号;
wParam-----消息参数,具体意义同发送的消息有关;
lParam-----同上;
time-------发送消息时的时间,数值大小为自系统启动以来经历的时间,单位是毫秒;
pt---------发送消息时鼠标在屏幕上的绝对坐标,单位是像素。
20、刷新屏幕局部:
刷新控件区域:
控件ID:IDC_STATIC_STATIC
------------------------------------
CRect static_rect;
CWnd *pwnd = GetDlgItem(IDC_STATIC_STATIC);
if (pwnd == NULL)
{
return;
}
pwnd->GetWindowRect(&static_rect);
ScreenToClient(&static_rect);
InvalidateRect(&static_rect); //注意这个函数,会调用OnEraseBkgnd
--------------------------------------
21、 vc控制word、excel的问题:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnoxpta/html/vsofficedev.asp
下面还有范例两个:
http://www.vckbase.com/code/downcode.asp?id=2415
http://www.vckbase.com/code/downcode.asp?id=2397
22、下拉式的工具条按钮:http://community.csdn.net/Expert/topic/4413/4413094.xml?temp=.2334864
23、为何组合框Droplist风格时响应键盘PreTranslateMessage函数,而dropdown风格时不响应:
http://community.csdn.net/Expert/topic/4412/4412791.xml?temp=.8741419
24、从内存中加载并启动一个exe :http://community.csdn.net/Expert/topic/4418/4418306.xml?temp=.7619135
25、快速从得到的全路径文件名中分离出盘符、路径名、文件名和后缀名:
------------------------------------------------
char path_buffer[_MAX_PATH];
char drive[_MAX_DRIVE];
char dir[_MAX_DIR];
char fname[_MAX_FNAME];
char ext[_MAX_EXT];
GetModuleFileName(0,path_buffer,_MAX_PATH);
_splitpath( path_buffer, drive, dir,fname , ext); //用这个函数转换
------------------------------------------------
26、监视文件夹是否被更新:FindFirstChangeNotification、FindNextChangeNotification、FindCloseChangeNotification这三个函数
范例见:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/obtaining_directory_change_notifications.asp
27、动态菜单:http://community.csdn.net/Expert/topic/4441/4441893.xml?temp=.2887384
http://community.csdn.net/Expert/topic/4506/4506791.xml?temp=.2409326
28、-----------------------------------------
114 得到剪贴板数据
-------------------------------------------------
if ( OpenClipboard() )
{
HANDLE hData = GetClipboardData(CF_TEXT);
char * buffer = (char*)GlobalLock(hData); //剪贴板中的文本内容保存在buffer中
GlobalUnlock(hData);
CloseClipboard();
}
----------------------------------------------
29、在CStatic上面关联图片
----------------------------------------------
CStatic* pWnd = (CStatic*)GetDlgItem(IDC_STATIC);
pWnd->ModifyStyle(0, SS_BITMAP);
pWnd->SetBitmap((HBITMAP)::LoadImage(0,
"c:\\zzzzz.bmp", //只能显示.bmp文件
IMAGE_BITMAP,
0,0,LR_CREATEDIBSECTION |LR_DEFAULTSIZE |LR_LOADFROMFILE));
----------------------------------------------
30、显示一个打开文件夹的对话框,并得到用户选择的目录:
-------------------------------------------
char szDir[MAX_PATH];
BROWSEINFO bi;
ITEMIDLIST *pidl;
bi.hwndOwner = this->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;
if(!SHGetPathFromIDList(pidl, szDir))
return;
AfxMessageBox(szDir); //szDir中存放的内容为用户选定的目录
------------------------------------------------
31、把CRichEditCtrl中的文字保存到rtf文件:http://community.csdn.net/Expert/topic/4478/4478640.xml?temp=.1313135
在codeproject上还有从CRichEditCtrl类派生新类的,功能增强了很多:http://www.codeproject.com/richedit/autoricheditctrl.asp
还有一个开发类似写字板那样程序的完整范例:http://www.codeproject.com/tools/simplewordpad.asp
32、这里有很多CRichEditCtrl控件的高级用法:http://www.codeguru.com/Cpp/controls/richedit/
33、MD5加密解密的API:http://community.csdn.net/Expert/topic/4502/4502325.xml?temp=.6894647
MD5Init
MD5Final
MD5Update
34、动态创建静态控件并加载.bmp图片,先在对话框类中定义成员变量:
----------------------------------------------------
public:
CStatic m_pp; //这个是在对话框类中定义的
再:
CBitmap cb;
cb.LoadBitmap(IDB_BITMAP1);
m_pp.Create("",WS_CHILD|WS_VISIBLE|SS_BITMAP,CRect(10,10,200,200),this,101);
m_pp.SetBitmap((HBITMAP)cb);
----------------------------------------------------
35、DLL中创建窗口时对于资源等,需要先进行状态处理:AFX_MANAGE_STATE(AfxGetStaticModuleState( ));
36、把图片中某种指定色变成透明色,在对话框的OnPaint()中加入类似如下代码:
-------------------------------------------------------------------------------
//CImage imgOriginal;
int XWitdh=imgOriginal.GetWidth();
int XHeight=imgOriginal.GetHeight();
COLORREF TransparentColor= RGB(0x00,0x00,0x00); //这里黑色变成透明色
CPaintDC dc(this);
imgOriginal.TransparentBlt(dc.m_hDC,0,0,XWitdh,XHeight,TransparentColor);
imgOriginal.StretchBlt(dc,0,0,imgOriginal.GetWidth()/2,imgOriginal.GetHeight()/2,SRCCOPY);
-------------------------------------------------------------------------------
37、rundll32.exe,这个程序很方便,用它可以调用任何 DLL 中的函数。你只要给它提供 DLL、函数名以及要传递的参数即可。Rundll32.exe 绝对多才多艺,你可以用它来关闭和重启 Windows,创建快捷方式以及启动控制面板程序。只要知道要调用的DLLs,一切都搞掂。你可以象下面这样用 rundll32.exe 从命令行打开一个 URL:
--------------------------------------------------------
rundll32.exe url.dll,FileProtocolHandler www.vckbase.com
--------------------------------------------------------
url.dll 中的函数 FileProtocolHandler 负责这个工作。
38、HDC===>CDC*
----------------------------------
HDC hdc=::GetWindowDC(this->m_hWnd); //获得窗口标题栏区域
CDC* pDC = CDC::FromHandle(hdc);
----------------------------------
CDC*===>HDC,可以通过CDC的操作符HDC()来实现:
------------------
HDC hdc=HDC(pDC); //或:HDC hdc=pDC->m_hdc;
------------------
39、设置对话框的背景色的简单方法,其实只要在CWinapp的InitInstance的里面添加一行代码就行了:
---------------------------------------------------------
BOOL CBOOKApp::InitInstance()
{
AfxEnableControlContainer();
SetDialogBkColor(RGB(213,240,227),RGB(173,7,95)); //添加这行,前者为背景色,后者为前景色
.....
}
---------------------------------------------------------
40、数字水印算法的实现:http://www.vckbase.com/code/listcode.asp?mclsid=7&sclsid=&page=3
41、读取其它进程内存中的数据:ReadProcessMemory
42、给程序加上系统托盘图标:http://www.vckbase.com/bbs/prime/viewprime.asp?id=260
下面是简单的代码:
--------------------------------------------------------------
NOTIFYICONDATA nid;
//初始化系统托盘图标
nid.cbSize = sizeof(NOTIFYICONDATA);
nid.hWnd = m_hWnd;
nid.uID = 100;
nid.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
nid.uCallbackMessage = WM_USER+20;
nid.hIcon=LoadIcon(NULL,IDI_APPLICATION); //图标
strcpy(nid.szTip, "My Tooltip Text"); //提示
Shell_NotifyIcon(NIM_ADD, &nid);
--------------------------------------------------------------
43、LOGFONT各成员的意义:
---------------------------------------------------------------------------------
LOGFONT lf;
lf.lfHeight=-80; //字体字符的高度
lf.lfWidth=0; //字符平均宽度
lf.lfEscapement=45; //文本行逆时针旋转45度
lf.lfOrientation=0; //字符角度
lf.lfWeight=FW_HEAVY; //字符的粗细度
lf.lfItalic=FALSE; //倾斜
lf.lfUnderline=FALSE; //下划线
lf.lfStrikeOut=FALSE; //删除线
lf.lfCharSet=GB2312_CHARSET; //中文字符集
lf.lfOutPrecision=OUT_STROKE_PRECIS; //字体输出结果和要求的匹配程度
lf.lfClipPrecision=CLIP_STROKE_PRECIS; //如何裁剪落于裁剪区之外的字符
lf.lfQuality=DRAFT_QUALITY; //字体属性匹配的精确程度
lf.lfPitchAndFamily=VARIABLE_PITCH | FF_MODERN; //字体间距和字体族
strcpy(lf.lfFaceName,"楷体_GB2312"); //楷体
m_font.CreateFontIndirect(&lf); //m_font为类的成员变量:CFont m_font;
---------------------------------------------------------------------------------
44、直接读取硬盘的指定扇区:
(1)用汇编;
(2)直接用CreateFile("\\.\PHYSICALDRIVE0", ...)打开物理磁盘设备即可(物理磁盘设备都是从0开始排号的,0表示第一块硬盘,1表示第二块硬盘....),这样用SetFilePointer可以随意读取硬盘上任何位置的东西!至于扇区嘛,一般都是512字节为1扇区的,自己换算就是了~ <===================还没试,不过这里有更多内容:http://www.51cto.com/html/2005/1110/11133.htm
45、CBitmap=====>HBITMAP:
-------------------------------------------------------------------------------------
CBitmap bitmap;
HBITMAP hbitmap=(HBITMAP)bitmap; //CBitmap中重载了HBITMAP()操作符,可以方便地用它来强制转换
-------------------------------------------------------------------------------------
HBITMAP=====>CBitmap:
---------------------------------------
HBITMAP hbitmap;
CBitmap bitmap;
bitmap.FromHandle(hbitmap);
---------------------------------------
46、从其它.exe文件提取.ico图标作为自己程序的图标:
----------------------------------------------------------------------
HINSTANCE hInst = LoadLibrary("b.exe");
HRSRC hRc = FindResource(hInst, (LPCSTR)1, (LPCSTR)RT_ICON);
LPVOID lpResource = LockResource(LoadResource(hInst,hRc));
HANDLE hUpdate = BeginUpdateResource("a.exe", FALSE);
UpdateResource(hUpdate, (LPCSTR)RT_ICON, (LPCSTR)1, 0, lpResource, SizeofResource(hInst, hRc));
EndUpdateResource(hUpdate, FALSE);
CloseHandle(hRc);
FreeLibrary(hInst);
-----------------------------------------------------------------------
47、请问NULL和null,TRUE和true,FALSE和false等有啥区别?
1.FALSE/TRUE与false/true的区别:
false/true是标准C++语言里新增的关键字,而FALSE/TRUE是通过#define,这要用途是解决程序在C与C++中环境的差异,以下是FALSE/TRUE在windef.h的定义:
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
#define TRUE 1
#endif
也就是说FALSE/TRUE是int类型,而false/true是bool类型;所以两者不一样的,只不过我们在使用中没有这种感觉,因为C++会帮你做隐式转换。
2.bool的大小与BOOL的区别:
bool在C++里是占用1字节,而BOOL是int类型,int类型的大小是视具体环境而定的;所以来说:false/true只占用1个字节,而TRUE/FALSE视具体环境而言
48、关机:ExitWindowsEx(EWX_SHUTDOWN or EWX_POWEROFF, 0 ) <=====还没试
强制关机ExitWindowsEx(EWX_FORCE or EWX_SHUTDOWN or EWX_POWEROFF, 0 );
49、字符串====>日期时间:
-------------------------------------------------
COleDateTime dt;
dt.ParseDateTime(_T("2006-2-14 8:00:00"));
SYSTEMTIME st={0};
dt.GetAsSystemTime(st);
//SetLocalTime(&st); //设置电脑中时间
-------------------------------------------------
日期时间====>字符串:
-------------------------------------------------
SYSTEMTIME st={0};
st.wYear=2006;
st.wMonth=3;
st.wDay=23;
st.wHour=8;
st.wMinute=30;
st.wSecond=59;
COleDateTime dt(st);
AfxMessageBox(dt.Format());
-------------------------------------------------
50、获得文件夹大小的方法,摘自:http://community.csdn.net/Expert/topic/4672/4672088.xml?temp=.2216761
----------------------------------------------------------------------------------
#include
#import "scrrun.dll" raw_interfaces_only
int main()
{
CoInitialize(NULL);
{
try
{
Scripting::IFileSystem3Ptr fs;
fs.CreateInstance(__uuidof(Scripting::FileSystemObject));
Scripting::IFolderPtr folder;
fs->GetFolder(_bstr_t("f:\\win98"),&folder);
_variant_t vsize;folder->get_Size(&vsize);
cout<<"f:\\win98 size:"<<(long)vsize<<" bytes"<
}
catch(_com_error &e)
{
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
cout<<"Get directory size via FileSystemObject, by masterz"<
cout<<"COM error occurred,source:"<<(LPCTSTR)bstrSource<
cout<<"Description:"<<(LPCTSTR)bstrDescription<
}
}
CoUninitialize();
return 0;
}
2、让程序暂停:system("PAUSE");
3、在PreTranslateMessage中捕捉键盘事件
if (pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN)return TRUE; //注意return的值
4、更改按键消息(下面的代码可把回车键消息改为TAB键消息)
-------------------------------------------------------
BOOL CT3Dlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message == WM_KEYDOWN && VK_RETURN == pMsg->wParam)
{
pMsg->wParam = VK_TAB;
}
return CDialog::PreTranslateMessage(pMsg);
}
------------------------------------------
5、 隐藏桌面图标并禁用右键功能菜单:
------------------------------------
HWND Hwd = ::FindWindow("Progman", NULL);
if (bShowed)
::ShowWindow(Hwd, SW_HIDE);
else
::ShowWindow(Hwd, SW_SHOW);
bShowed = !bShowed;
---------------------------------------
6、复制文件应该用到CopyFile或是CopyFileEx这两个API
7、SendMessage函数的几个用法:
控制按钮按下的,是这么用的
SendMessage(n1, WM_COMMAND, MAKELPARAM(ID,BN_CLICKED),(LPARAM )n2); (n1,n2是句柄)
而得到文本内容,是这样用的,
SendMessage(hWnd,WM_GETTEXT,10,(LPARAM)buf),
8、处理一个单行EDIT的WM_CTLCOLOR要同时响应nCtlColor = CTLCOLOR_EDIT和CTLCOLOR_MSGBOX的两个情况,参考http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_mfc_cwnd.3a3a.onctlcolor.asp
9、数组初始化:
int a[24][34]; //声明数组
memset(a,-1,24*34); //全部元素初始化成-1,但初始化成除0和-1以外的数值是不行的
10、创建一个控件:
HWND hEdit=CreateWindow("EDIT",NULL,WS_CHILD|WS_VISIBLE |ES_LEFT,50,20,50,20,hwnd,NULL,hInst,NULL); //hwnd参数为父窗口句柄
11、调用其它程序又要隐藏窗口:用CreateProcess函数调用,再拿到窗口句柄,然后::ShowWindow(hWnd,SW_HIDE);
12、日期到字符串:
--------------------------------------------------
SYSTEMTIME sys;
GetSystemTime(&sys);
char str[100];
sprintf(str,"%d%d%d_%d%d%d",sys.wYear,sys.wMonth,sys.wDay,sys.wHour+8,sys.wMinute,sys.wSecond);
//这里的小时数注意它的0:00点是早上8:00,所以要加上8,因为这是格林威治时间,换成我国时区要加8
--------------------------------------------------
CString m_strTemp;
SYSTEMTIME systemtime;
GetLocalTime(&systemtime); //这个函数可获得毫秒级的当前时间
m_strTemp.Format("%d年%d月%d日%d:%d:%d:%d 星期%d",systemtime.wYear,systemtime.wMonth,systemtime.wDay,systemtime.wHour,systemtime.wMinute,systemtime.wSecond,systemtime.wMilliseconds,systemtime.wDayOfWeek);
--------------------------------------------------
13、任务栏上的图标闪烁:
The FlashWindow function flashes the specified window once, whereas the FlashWindowEx function flashes a specified number of times.
BOOL FlashWindow(
HWND hWnd, // handle to window to flash
BOOL bInvert // flash status
);//闪烁一次
FlashWindowEx()//闪烁多次
14、在一个由汉字组成的字符串里,由于一个汉字由两个字节组成,怎样判断其中一个字节是汉字的第一个字节,还是第二个字节,使用IsDBCSLeadByte函数能够判断一个字符是否是双字的第一个字节,试试看:)
_ismbslead
_ismbstrail
15、如何实现对话框面板上的控件随着对话框大小变化自动调整
在OnSize中依其比例用MoveWindow同等缩放.http://www.codeproject.com/dialog/dlgresizearticle.asp
16、给你的程序加上splash:http://www.vckbase.com/document/finddoc.asp?keyword=splash
如何添加闪屏:Project->Add to Project->Components and Controls->Gallery\\Visual C++ Components->Splash screen
17、得到CListCtrl控件点击事件时点击的位置:
-----------------------------------------------
void CTest6Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
if(pNMListView->iItem != -1)
{
CString strtemp;
strtemp.Format("单击的是第%d行第%d列",
pNMListView->iItem, pNMListView->iSubItem);
AfxMessageBox(strtemp);
}
*pResult = 0;
}
------------------------------------------------
18、 如何在VC中操纵word:http://www.vckbase.com/document/viewdoc/?id=1174
19、消息传递中pMSG中一些参数的意义:
hwnd-------接收消息的窗口句柄;
message----发送的消息号;
wParam-----消息参数,具体意义同发送的消息有关;
lParam-----同上;
time-------发送消息时的时间,数值大小为自系统启动以来经历的时间,单位是毫秒;
pt---------发送消息时鼠标在屏幕上的绝对坐标,单位是像素。
20、刷新屏幕局部:
刷新控件区域:
控件ID:IDC_STATIC_STATIC
------------------------------------
CRect static_rect;
CWnd *pwnd = GetDlgItem(IDC_STATIC_STATIC);
if (pwnd == NULL)
{
return;
}
pwnd->GetWindowRect(&static_rect);
ScreenToClient(&static_rect);
InvalidateRect(&static_rect); //注意这个函数,会调用OnEraseBkgnd
--------------------------------------
21、 vc控制word、excel的问题:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnoxpta/html/vsofficedev.asp
下面还有范例两个:
http://www.vckbase.com/code/downcode.asp?id=2415
http://www.vckbase.com/code/downcode.asp?id=2397
22、下拉式的工具条按钮:http://community.csdn.net/Expert/topic/4413/4413094.xml?temp=.2334864
23、为何组合框Droplist风格时响应键盘PreTranslateMessage函数,而dropdown风格时不响应:
http://community.csdn.net/Expert/topic/4412/4412791.xml?temp=.8741419
24、从内存中加载并启动一个exe :http://community.csdn.net/Expert/topic/4418/4418306.xml?temp=.7619135
25、快速从得到的全路径文件名中分离出盘符、路径名、文件名和后缀名:
------------------------------------------------
char path_buffer[_MAX_PATH];
char drive[_MAX_DRIVE];
char dir[_MAX_DIR];
char fname[_MAX_FNAME];
char ext[_MAX_EXT];
GetModuleFileName(0,path_buffer,_MAX_PATH);
_splitpath( path_buffer, drive, dir,fname , ext); //用这个函数转换
------------------------------------------------
26、监视文件夹是否被更新:FindFirstChangeNotification、FindNextChangeNotification、FindCloseChangeNotification这三个函数
范例见:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/obtaining_directory_change_notifications.asp
27、动态菜单:http://community.csdn.net/Expert/topic/4441/4441893.xml?temp=.2887384
http://community.csdn.net/Expert/topic/4506/4506791.xml?temp=.2409326
28、-----------------------------------------
114 得到剪贴板数据
-------------------------------------------------
if ( OpenClipboard() )
{
HANDLE hData = GetClipboardData(CF_TEXT);
char * buffer = (char*)GlobalLock(hData); //剪贴板中的文本内容保存在buffer中
GlobalUnlock(hData);
CloseClipboard();
}
----------------------------------------------
29、在CStatic上面关联图片
----------------------------------------------
CStatic* pWnd = (CStatic*)GetDlgItem(IDC_STATIC);
pWnd->ModifyStyle(0, SS_BITMAP);
pWnd->SetBitmap((HBITMAP)::LoadImage(0,
"c:\\zzzzz.bmp", //只能显示.bmp文件
IMAGE_BITMAP,
0,0,LR_CREATEDIBSECTION |LR_DEFAULTSIZE |LR_LOADFROMFILE));
----------------------------------------------
30、显示一个打开文件夹的对话框,并得到用户选择的目录:
-------------------------------------------
char szDir[MAX_PATH];
BROWSEINFO bi;
ITEMIDLIST *pidl;
bi.hwndOwner = this->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;
if(!SHGetPathFromIDList(pidl, szDir))
return;
AfxMessageBox(szDir); //szDir中存放的内容为用户选定的目录
------------------------------------------------
31、把CRichEditCtrl中的文字保存到rtf文件:http://community.csdn.net/Expert/topic/4478/4478640.xml?temp=.1313135
在codeproject上还有从CRichEditCtrl类派生新类的,功能增强了很多:http://www.codeproject.com/richedit/autoricheditctrl.asp
还有一个开发类似写字板那样程序的完整范例:http://www.codeproject.com/tools/simplewordpad.asp
32、这里有很多CRichEditCtrl控件的高级用法:http://www.codeguru.com/Cpp/controls/richedit/
33、MD5加密解密的API:http://community.csdn.net/Expert/topic/4502/4502325.xml?temp=.6894647
MD5Init
MD5Final
MD5Update
34、动态创建静态控件并加载.bmp图片,先在对话框类中定义成员变量:
----------------------------------------------------
public:
CStatic m_pp; //这个是在对话框类中定义的
再:
CBitmap cb;
cb.LoadBitmap(IDB_BITMAP1);
m_pp.Create("",WS_CHILD|WS_VISIBLE|SS_BITMAP,CRect(10,10,200,200),this,101);
m_pp.SetBitmap((HBITMAP)cb);
----------------------------------------------------
35、DLL中创建窗口时对于资源等,需要先进行状态处理:AFX_MANAGE_STATE(AfxGetStaticModuleState( ));
36、把图片中某种指定色变成透明色,在对话框的OnPaint()中加入类似如下代码:
-------------------------------------------------------------------------------
//CImage imgOriginal;
int XWitdh=imgOriginal.GetWidth();
int XHeight=imgOriginal.GetHeight();
COLORREF TransparentColor= RGB(0x00,0x00,0x00); //这里黑色变成透明色
CPaintDC dc(this);
imgOriginal.TransparentBlt(dc.m_hDC,0,0,XWitdh,XHeight,TransparentColor);
imgOriginal.StretchBlt(dc,0,0,imgOriginal.GetWidth()/2,imgOriginal.GetHeight()/2,SRCCOPY);
-------------------------------------------------------------------------------
37、rundll32.exe,这个程序很方便,用它可以调用任何 DLL 中的函数。你只要给它提供 DLL、函数名以及要传递的参数即可。Rundll32.exe 绝对多才多艺,你可以用它来关闭和重启 Windows,创建快捷方式以及启动控制面板程序。只要知道要调用的DLLs,一切都搞掂。你可以象下面这样用 rundll32.exe 从命令行打开一个 URL:
--------------------------------------------------------
rundll32.exe url.dll,FileProtocolHandler www.vckbase.com
--------------------------------------------------------
url.dll 中的函数 FileProtocolHandler 负责这个工作。
38、HDC===>CDC*
----------------------------------
HDC hdc=::GetWindowDC(this->m_hWnd); //获得窗口标题栏区域
CDC* pDC = CDC::FromHandle(hdc);
----------------------------------
CDC*===>HDC,可以通过CDC的操作符HDC()来实现:
------------------
HDC hdc=HDC(pDC); //或:HDC hdc=pDC->m_hdc;
------------------
39、设置对话框的背景色的简单方法,其实只要在CWinapp的InitInstance的里面添加一行代码就行了:
---------------------------------------------------------
BOOL CBOOKApp::InitInstance()
{
AfxEnableControlContainer();
SetDialogBkColor(RGB(213,240,227),RGB(173,7,95)); //添加这行,前者为背景色,后者为前景色
.....
}
---------------------------------------------------------
40、数字水印算法的实现:http://www.vckbase.com/code/listcode.asp?mclsid=7&sclsid=&page=3
41、读取其它进程内存中的数据:ReadProcessMemory
42、给程序加上系统托盘图标:http://www.vckbase.com/bbs/prime/viewprime.asp?id=260
下面是简单的代码:
--------------------------------------------------------------
NOTIFYICONDATA nid;
//初始化系统托盘图标
nid.cbSize = sizeof(NOTIFYICONDATA);
nid.hWnd = m_hWnd;
nid.uID = 100;
nid.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
nid.uCallbackMessage = WM_USER+20;
nid.hIcon=LoadIcon(NULL,IDI_APPLICATION); //图标
strcpy(nid.szTip, "My Tooltip Text"); //提示
Shell_NotifyIcon(NIM_ADD, &nid);
--------------------------------------------------------------
43、LOGFONT各成员的意义:
---------------------------------------------------------------------------------
LOGFONT lf;
lf.lfHeight=-80; //字体字符的高度
lf.lfWidth=0; //字符平均宽度
lf.lfEscapement=45; //文本行逆时针旋转45度
lf.lfOrientation=0; //字符角度
lf.lfWeight=FW_HEAVY; //字符的粗细度
lf.lfItalic=FALSE; //倾斜
lf.lfUnderline=FALSE; //下划线
lf.lfStrikeOut=FALSE; //删除线
lf.lfCharSet=GB2312_CHARSET; //中文字符集
lf.lfOutPrecision=OUT_STROKE_PRECIS; //字体输出结果和要求的匹配程度
lf.lfClipPrecision=CLIP_STROKE_PRECIS; //如何裁剪落于裁剪区之外的字符
lf.lfQuality=DRAFT_QUALITY; //字体属性匹配的精确程度
lf.lfPitchAndFamily=VARIABLE_PITCH | FF_MODERN; //字体间距和字体族
strcpy(lf.lfFaceName,"楷体_GB2312"); //楷体
m_font.CreateFontIndirect(&lf); //m_font为类的成员变量:CFont m_font;
---------------------------------------------------------------------------------
44、直接读取硬盘的指定扇区:
(1)用汇编;
(2)直接用CreateFile("\\.\PHYSICALDRIVE0", ...)打开物理磁盘设备即可(物理磁盘设备都是从0开始排号的,0表示第一块硬盘,1表示第二块硬盘....),这样用SetFilePointer可以随意读取硬盘上任何位置的东西!至于扇区嘛,一般都是512字节为1扇区的,自己换算就是了~ <===================还没试,不过这里有更多内容:http://www.51cto.com/html/2005/1110/11133.htm
45、CBitmap=====>HBITMAP:
-------------------------------------------------------------------------------------
CBitmap bitmap;
HBITMAP hbitmap=(HBITMAP)bitmap; //CBitmap中重载了HBITMAP()操作符,可以方便地用它来强制转换
-------------------------------------------------------------------------------------
HBITMAP=====>CBitmap:
---------------------------------------
HBITMAP hbitmap;
CBitmap bitmap;
bitmap.FromHandle(hbitmap);
---------------------------------------
46、从其它.exe文件提取.ico图标作为自己程序的图标:
----------------------------------------------------------------------
HINSTANCE hInst = LoadLibrary("b.exe");
HRSRC hRc = FindResource(hInst, (LPCSTR)1, (LPCSTR)RT_ICON);
LPVOID lpResource = LockResource(LoadResource(hInst,hRc));
HANDLE hUpdate = BeginUpdateResource("a.exe", FALSE);
UpdateResource(hUpdate, (LPCSTR)RT_ICON, (LPCSTR)1, 0, lpResource, SizeofResource(hInst, hRc));
EndUpdateResource(hUpdate, FALSE);
CloseHandle(hRc);
FreeLibrary(hInst);
-----------------------------------------------------------------------
47、请问NULL和null,TRUE和true,FALSE和false等有啥区别?
1.FALSE/TRUE与false/true的区别:
false/true是标准C++语言里新增的关键字,而FALSE/TRUE是通过#define,这要用途是解决程序在C与C++中环境的差异,以下是FALSE/TRUE在windef.h的定义:
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
#define TRUE 1
#endif
也就是说FALSE/TRUE是int类型,而false/true是bool类型;所以两者不一样的,只不过我们在使用中没有这种感觉,因为C++会帮你做隐式转换。
2.bool的大小与BOOL的区别:
bool在C++里是占用1字节,而BOOL是int类型,int类型的大小是视具体环境而定的;所以来说:false/true只占用1个字节,而TRUE/FALSE视具体环境而言
48、关机:ExitWindowsEx(EWX_SHUTDOWN or EWX_POWEROFF, 0 ) <=====还没试
强制关机ExitWindowsEx(EWX_FORCE or EWX_SHUTDOWN or EWX_POWEROFF, 0 );
49、字符串====>日期时间:
-------------------------------------------------
COleDateTime dt;
dt.ParseDateTime(_T("2006-2-14 8:00:00"));
SYSTEMTIME st={0};
dt.GetAsSystemTime(st);
//SetLocalTime(&st); //设置电脑中时间
-------------------------------------------------
日期时间====>字符串:
-------------------------------------------------
SYSTEMTIME st={0};
st.wYear=2006;
st.wMonth=3;
st.wDay=23;
st.wHour=8;
st.wMinute=30;
st.wSecond=59;
COleDateTime dt(st);
AfxMessageBox(dt.Format());
-------------------------------------------------
50、获得文件夹大小的方法,摘自:http://community.csdn.net/Expert/topic/4672/4672088.xml?temp=.2216761
----------------------------------------------------------------------------------
#include
#import "scrrun.dll" raw_interfaces_only
int main()
{
CoInitialize(NULL);
{
try
{
Scripting::IFileSystem3Ptr fs;
fs.CreateInstance(__uuidof(Scripting::FileSystemObject));
Scripting::IFolderPtr folder;
fs->GetFolder(_bstr_t("f:\\win98"),&folder);
_variant_t vsize;folder->get_Size(&vsize);
cout<<"f:\\win98 size:"<<(long)vsize<<" bytes"<
}
catch(_com_error &e)
{
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
cout<<"Get directory size via FileSystemObject, by masterz"<
cout<<"COM error occurred,source:"<<(LPCTSTR)bstrSource<
cout<<"Description:"<<(LPCTSTR)bstrDescription<
}
}
CoUninitialize();
return 0;
}
- vc 小技巧1
- vc++工具小技巧
- VC常用小技巧
- vc小技巧
- vc 调试小技巧
- VC小技巧
- vc 小技巧
- vc小技巧
- VC实用小技巧
- vc实用小技巧
- VC常用小技巧
- VC常用小技巧
- VC小技巧
- VC开发小技巧
- VC小技巧
- VC小技巧
- vc开发小技巧
- VC小技巧收集
- 【Eclipse基础 003】 快捷键
- poj1201 - Intervals
- linux开发必须掌握的shell命令总结
- 购物车模块总结2
- 动态改变log4j的运行级别
- VC 小技巧
- android 属性系统,SystemProperties 的简介---转载
- Hulu宣讲会小记(9月5日计算所)
- 小写数字与啊啦伯字数间的转换
- UNIX SIGTERM等信号意义
- WCF传输大数据的设置
- socket函数
- 享尽爱情的美妙
- JQuery中操作Css样式