荣耀9和8哪个华为适合女生用的手机生

转至:/content/12/41.shtml
1.区别wchar_t,char,WCHAR
&& ANSI:即 char,可用字符串处理函数:strcat( ),strcpy( ), strlen( )等以str打头的函数。&& UNICODE:wchar_t是Unicode字符的数据类型,它实际定义在里:&& typedef unsigned short wchar_t;&& 另外,在头文件中有这样的定义:typedef wchar_t WCHAR; 所以WCHAR实际就是wchar_t&& wchar_t 可用字符串处理函数:wcscat(),wcscpy(),wcslen()等以wcs打头的函数。为了让编译器识别Unicode字符串,必须以在前面加一个“L”,例如: wchar_t *szTest=L"This is a Unicode string.";2.TCHAR
在C语言里面提供了 _UNICODE宏(有下划线),在Windows里面提供了UNICODE宏(无下划线),只要定了_UNICODE宏和UNICODE宏,系统就会自 动切换到UNICODE版本,否则,系统按照ANSI的方式进行编译和运行。只定义了宏并不能实现自动的转换,他还需要一系列的字符定义支持。1. TCHAR如果定义了UNICODE宏则TCHAR被定义为wchar_t。typedef wchar_t TCHAR;&& 否则TCHAR被定义为char typedef char TCHAR;2. LPTSTR&& 如果定义了UNICODE宏则LPTSTR被定义为LPWSTR。&& typedef LPTSTR LPWSTR;&& 否则TCHAR被定义为char typedef LPTSTR LPSTR;&& 说明:在使用字符串常量的时候需要使用_TEXT(“MyStr”)或者_T("")来支持系统的自动转换。3.BSTR
&& BSTR是一个带长度前缀的字符串,主要由操作系统来管理的,所以要用api.主要用来和VB打交道的(VB里的string就是指它)要操作它的API函数有很多.比如SysAllocString,SysFreeString等等.&& vc里封装它的类如_bstr_t,及ATL中的CComBSTR等.&& 一个 BSTR 由头部和字符串组成,头部包含了字符串的长度信息,字符串中可以包含嵌入的 null 值。&& BSTR 是以指针的形式进行传递的。(指针是一个变量,包含另外一个变量的内存地址,而不是数据。) BSTR 是 Unicode 的,即每个字符需要两个字节。 BSTR 通常以两字节的 null 字符结束。 wstr是宽字符,以双字节表示一个字符 bstr是为了与原先的basic字符兼容,它的最前面的4个字节为其长度,以'\0'结束.4.更进一步的字符串以及其指针的类型定义 
由于Win32 API文档的函数列表使用函数的常用名字(例如, "SetWindowText"),所有的字符串都是用TCHAR来定义的。(除了XP中引入的只适用于Unicode的API)。下面列出一些常用的typedefs,你可以在msdn中看到他们。
Meaning in MBCS builds
Meaning in Unicode builds
const char*
const char*
TCHAR char
const TCHAR*
const TCHAR*
5.相互转换
(1) char*转换成CString  若将char*转换成CString,除了直接赋值外,还可使用CString::Format进行。例如:char chArray[] = "This is a test";char * p = "This is a test";  或LPSTR p = "This is a test";  或在已定义Unicode应的用程序中TCHAR * p = _T("This is a test");  或LPTSTR p = _T("This is a test");CString theString = chAtheString.Format(_T("%s"), chArray);theString =  (2) CString转换成char*  若将CString类转换成char*(LPSTR)类型,常常使用下列三种方法:  方法一,使用强制转换。例如:CString theString( "This is a test" );LPTSTR lpsz =(LPTSTR)(LPCTSTR)theS&  方法二,使用strcpy。例如:CString theString( "This is a test" );LPTSTR lpsz = new TCHAR[theString.GetLength()+1];_tcscpy(lpsz, theString);  需要说明的是,strcpy(或可移值Unicode/MBCS的_tcscpy)的第二个参数是 const wchar_t* (Unicode)或const char* (ANSI),系统编译器将会自动对其进行转换。  方法三,使用CString::GetBuffer。例如:CString s(_T("This is a test "));LPTSTR p = s.GetBuffer();// 在这里添加使用p的代码if(p != NULL) *p = _T('\0');s.ReleaseBuffer();// 使用完后及时释放,以便能使用其它的CString成员函数  (3) BSTR转换成char*  方法一,使用ConvertBSTRToString。例如:#include#pragma comment(lib, "comsupp.lib")int _tmain(int argc, _TCHAR* argv[]){BSTR bstrText = ::SysAllocString(L"Test");char* lpszText2 = _com_util::ConvertBSTRToString(bstrText);SysFreeString(bstrText); // 用完释放delete[] lpszText2;return 0;}&  方法二,使用_bstr_t的赋值运算符重载。例如:_bstr_t b = bstrTchar* lpszText2 =  (4) char*转换成BSTR  方法一,使用SysAllocString等API函数。例如:BSTR bstrText = ::SysAllocString(L"Test");BSTR bstrText = ::SysAllocStringLen(L"Test",4);BSTR bstrText = ::SysAllocStringByteLen("Test",4);  方法二,使用COleVariant或_variant_t。例如://COleVariant strVar("This is a test");_variant_t strVar("This is a test");BSTR bstrText = strVar.bstrV  方法三,使用_bstr_t,这是一种最简单的方法。例如:BSTR bstrText = _bstr_t("This is a test");  方法四,使用CComBSTR。例如:BSTR bstrText = CComBSTR("This is a test");  或CComBSTR bstr("This is a test");BSTR bstrText = bstr.m_  方法五,使用ConvertStringToBSTR。例如:char* lpszText = "Test";BSTR bstrText = _com_util::ConvertStringToBSTR(lpszText);  (5) CString转换成BSTR  通常是通过使用CStringT::AllocSysString来实现。例如:CString str("This is a test");BSTR bstrText = str.AllocSysString();…SysFreeString(bstrText); // 用完释放&  (6) BSTR转换成CString  一般可按下列方法进行:BSTR bstrText = ::SysAllocString(L"Test");CStringAstr.Empty();str = bstrT&  或CStringA str(bstrText);  (7) ANSI、Unicode和宽字符之间的转换  方法一,使用MultiByteToWideChar将ANSI字符转换成Unicode字符,使用WideCharToMultiByte将Unicode字符转换成ANSI字符。  方法二,使用“_T”将ANSI转换成“一般”类型字符串,使用“L”将ANSI转换成Unicode,而在托管C++环境中还可使用S将ANSI字符串转换成String*对象。例如:TCHAR tstr[] = _T("this is a test");wchar_t wszStr[] = L"This is a test";String* str = S”This is a test”;  方法三,使用ATL 7.0的转换宏和类。ATL7.0在原有3.0基础上完善和增加了许多字符串转换宏以及提供相应的类,它具有如图3所示的统一形式:  其中,第一个C表示“类”,以便于ATL 3.0宏相区别,第二个C表示常量,2表示“to”,EX表示要开辟一定大小的缓冲。SourceType和DestinationType可以是A、 T、W和OLE,其含义分别是ANSI、Unicode、“一般”类型和OLE字符串。例如,CA2CT就是将ANSI转换成一般类型的字符串常量。下面 是一些示例代码:LPTSTR tstr= CA2TEX&16&("this is a test");LPCTSTR tcstr= CA2CT("this is a test");wchar_t wszStr[] = L"This is a test";char* chstr = CW2A(wszStr);
阅读(...) 评论()vc++&ascII&转unicode&方法
1,Cstring 与char
origCString("Hello, World!");&
wchar_t* wCharString =
origCString.GetBuffer(origCString.GetLength()+1);&
size_t origsize = wcslen(wCharString) +
size_t convertedChars = 0;&
char *CharS&
CharString=new char(origsize);&
wcstombs_s(&convertedChars, CharString, origsize,
wCharString , _TRUNCATE);&
cout && CharString
2,1、char*转换成CString
若将char*转换成CString,除了直接赋值外,还可使用CString::format进行。例如:
char chArray[] = "This is a test";
char * p = "This is a test";
LPSTR p = "This is a test"; 或在已定义Unicode应的用程序中
TCHAR * p = _T("This is a test"); 或
LPTSTR p = _T("This is a test");
CString theString = chA
theString.format(_T("%s"), chArray);
theString =
2、CString转换成char*
若将CString类转换成char*(LPSTR)类型,常常使用下列三种方法:
方法一,使用强制转换。例如:
CString theString( "This is a test" );
LPTSTR lpsz =(LPTSTR)(LPCTSTR)theS 方法二,使用strcpy。例如:
CString theString( "This is a test" );
LPTSTR lpsz = new TCHAR[theString.GetLength()+1];
_tcscpy(lpsz, theString);
需要说明的是,strcpy(或可移值Unicode/MBCS的_tcscpy)的第二个参数是 const wchar_t*
(Unicode)或const char* (ANSI),系统编译器将会自动对其进行转换。
方法三,使用CString::GetBuffer。例如:
CString s(_T("This is a test "));
LPTSTR p = s.GetBuffer();
// 在这里添加使用p的代码
if(p != NULL) *p = _T(''\0'');
s.ReleaseBuffer(); // 使用完后及时释放,以便能使用其它的CString成员函数
3、BSTR转换成char*
方法一,使用ConvertBSTRToString。例如:
#include #pragma comment(lib, "comsupp.lib")
int _tmain(int argc, _TCHAR* argv[])
BSTR bstrText = ::SysAllocString(L"Test");
char* lpszText2 =
_com_util::ConvertBSTRToString(bstrText);
SysFreeString(bstrText); // 用完释放
delete[] lpszText2;
} 方法二,使用_bstr_t的赋值运算符重载。例如:
_bstr_t b = bstrT
char* lpszText2 =
4、char*转换成BSTR
方法一,使用SysAllocString等API函数。例如:
BSTR bstrText = ::SysAllocString(L"Test");
BSTR bstrText = ::SysAllocStringLen(L"Test",4);
BSTR bstrText = ::SysAllocStringByteLen("Test",4);
方法二,使用COleVariant或_variant_t。例如:
//COleVariant strVar("This is a test");
_variant_t strVar("This is a test");
BSTR bstrText = strVar.bstrV
方法三,使用_bstr_t,这是一种最简单的方法。例如:
BSTR bstrText = _bstr_t("This is a test");
方法四,使用CComBSTR。例如:
BSTR bstrText = CComBSTR("This is a test"); 或
CComBSTR bstr("This is a test");
BSTR bstrText = bstr.m_ 方法五,使用ConvertStringToBSTR。例如:
char* lpszText = "Test";
BSTR bstrText = _com_util::ConvertStringToBSTR(lpszText);
5、CString转换成BSTR
通常是通过使用CStringT::AllocSysString来实现。例如:
CString str("This is a test");
BSTR bstrText = str.AllocSysString();
SysFreeString(bstrText); // 用完释放
6、BSTR转换成CString
一般可按下列方法进行:
BSTR bstrText = ::SysAllocString(L"Test");
str.Empty();
str = bstrT 或
CStringA str(bstrText);
7、ANSI、Unicode和宽字符之间的转换
方法一,使用MultiByteToWideChar将ANSI字符转换成Unicode字符,使用WideCharToMultiByte将Unicode字符转换成ANSI字符。
方法二,使用“_T”将ANSI转换成“一般”类型字符串,使用“L”将ANSI转换成Unicode,而在托管C++环境中还可使用S将ANSI字符串转换成String*对象。例如:
TCHAR tstr[] = _T("this is a test");
wchar_t wszStr[] = L"This is a test";
String* str = S”This is a test”; 方法三,使用ATL
7.0的转换宏和类。ATL7.0在原有3.0基础上完善和增加了许多字符串转换宏以及提供相应的类,它具有如图3所示的统一形式:
其中,第一个C表示“类”,以便于ATL
3.0宏相区别,第二个C表示常量,2表示“to”,EX表示要开辟一定大小的缓冲。SourceType和DestinationType可以是A、T、W和OLE,其含义分别是ANSI、Unicode、“一般”类型和OLE字符串。例如,CA2CT就是将ANSI转换成一般类型的字符串常量。下面是一些示例代码:
LPTSTR tstr= CA2TEX&16&("this is a
LPCTSTR tcstr= CA2CT("this is a test");
wchar_t wszStr[] = L"This is a test";
char* chstr = CW2A(wszStr);
几乎所有的程序都要用到字符串,而Visual
C++由于功能强大、应用广泛,因而字符串之间的转换更为频繁。本文几乎涉及到目前的所有转换方法。当然对于.NET框架来说,还可使用Convert和Text类进行不同数据类型以及字符编码之间的相互转换。
&&&& #include
&&&&& CString strCString="ABC";
&&&&& char strchar[256],*
&&&&& pstr=(LPSTR)(LPCTSTR)strCS //CString----&char*
&&&&& strcpy(strchar,(LPSTR)(LPCTSTR)strCString); //CString----&char[]
&&&&& _bstr_t strbstr= //char*----&_bstr_t
&&&&& WCHAR *strWCHAR= //b_str_t---&UNICODE
&&&&& strbstr=strWCHAR;
&&&&& pstr= //UNICODE----&char*
&&&&& strCString="10";
&&&&& int istr=atoi((LPSTR)(LPCTSTR)strCString); //CString、char[]、char*------&int
&&&&& strCString.Format("%d",istr); //int-----&CString
&&&&& sprintf(strchar,"%d",istr); //int-----&char[]
&&&&& pstr=new char[256]; //字符串申请空间
&&&&& strcpy(pstr,"ABC"); //字符串赋值
&&&&& delete [] //字符串释放
&&&&& string strstring="ABC";
&&&&& pstr=(char*)strstring.c_str(); //string----&char*
&&&&& strCString=" 6:24:37"; //CString---&COleDateTime
&&&&& COleVariant vtime(strCString);
&&&&& vtime.ChangeType(VT_DATE);
&&&&& COleDateTime time4=
&&&&& COleDateTime time1(,2,2,2); //COleDataTime---&CTime
&&&&& SYSTEMTIME
&&&&& VariantTimeToSystemTime(time1, &systime);
&&&&& CTime tm(systime);
&&&&& time_t time2=tm.GetTime(); //CTime---&time_t
&&&&& COleDateTime time3(time2); //time_t---&COleDateTime
&&&&& //判断字符串是否是某种类型
&&&&& CString sValue("123.1");
&&&&& COleVariant vValue(sValue);
&&&&& BOOL bStrIsFloat = (SUCCEEDED(VariantChangeType(&vValue, &vValue, 0, VT_R8)) && sValue.Find(''.'') != -1);
&&&&& if(bStrIsFloat)
&&&&& AfxMessageBox("浮点");
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。WTL/MFC多字节和Unicode字符转换
我们在最开始学习MFC的时候,毫无疑问会遇到这样的问题。
VC6的设置:多字节。
vs的默认设置:Unicode,在属性中可以改成多字节。
多字节编码:char,string,CStringA。
Unicode编码:wchar_t,wstring,CStringW。
注意:如果项目是Unicode,那么CString就被定义为CStringW,否则就是CStringA。
LPSTR = char*;LPCSTR = const char*;
LPWSTR = wchar_t*;LPCWSTR = const wchar_t*;
至于LPCTSTR也是根据项目字符集来定义为LPCWSTR(Unicode)或LPCSTR(多字节)。
OK,上面的定义很明显了,注意用的时候别弄混了,我觉得最好的方式是,使用wchar_t和wstring(api大多使用unicode,即使是多字节版本也是把多字节转成unicode再去调用unicode版api),我不太喜欢CString。
接下来就是转换:
char* 到 string:string str(&char&); 或者string str = &char&;
string 到 char*:const char* ch = str.c_str();
wchar_t* 和 wstring与上相同。
char* 到 CStringA:CStringA str(&char&);
CStringA 到 char*:const char* ch = str.operator LPCSTR(); (注意:反对使用GetBuffer,因为使用这个,必须要ReleaseBuffer,而且很多时候没必要去分配空间)
wchar_t* 和 CStringW与上相同。
// 字符集之间转换
char* 到 wchar_t*:CA2W a2w(&char&); &const wchar_t* wch = a2w.operator LPCWSTR();
wchar_t* 到 char*:CW2A w2a(L&wchar_t&); const char* ch = w2a.operator LPCSTR(); &(注意:反对使用_T(&chs&)这种方式,程序字符集在一开始就该确定,而且最好选择Unicode)
关于CA2W和CW2A这两个类,可以在atlconv.h中找到源代码,其实就是对WideCharToMultiByte和MultiByteToWideChar的封装。君,已阅读到文档的结尾了呢~~
常见类型转换(Cstring _char_wchar)
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
常见类型转换(Cstring _char_wchar)
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口Window(4)
##############基础类型################
bit/位 1位的取值范围 0~1
byte/字节 1字节的取值范围0~进制)~255(10进制)~FF(16进制)
word/单字(2字节) 1个单字范围 0~1111(2进制)~65535(10进制)~FFFF(16进制)
dword/双字(4字节) 1个双字范围 0~111*(2进制)~(10进制)~FFFFFFFF(16进制)
//char 8位----1byte
//short 16位---2byte
//int 32位----4byte
HWND是HANDLE的一种,但是HANDLE并不是HWND.
HANDLE是操作系统一系列内核对象的句柄。
HWND仅是窗口对象的句柄
a[y][x]---------######
横是x 竖是y ######
HINSTANCE是应用程序实例句柄,HWND是窗口句柄
4.指针移动
int a[10];
pa = &a[0];
pa+1将指向下一个元素a[1]:
&&& 内存中的变化:&指针加1&会根据指针指定的类型int移动4个内存单元,
&其实本身并没有移动,只是pa+1等于第5个内存单元地址——
&“指针加1”中的1的大小是取决于pa的类型int的,
&指针类型决定指针跨内存单元的步长。
& &&& &a[i]和a+i含义相同,相互使用。a+i是a之后第i个元素地址。
& &&& 数组名代表数组第一个元素的地址。
############itoa##############
int number = 123456;
  char string[25];
  itoa(number, string, 10);
###########atoi#############
  char *str = &12345.67&;
  n = atoi(str);
###long转CString###&
str.Format(_T(&%ld&),rect.bottom);
###定时器使用###
#####添加热键#########
1、.h文件中添加 afx_msg LRESULT OnHotKey(WPARAM wParam,LPARAM lParam);
2、.cpp消息映射区域里面添加 & ON_MESSAGE(WM_HOTKEY,OnHotKey)&
3、OnInitDialog中添加注册热键 &RegisterHotKey(GetSafeHwnd(),1001,NULL,VK_F2); &为F2
4、实现函数 LRESULT CNiHuaWoCaiDlg::OnHotKey(WPARAM wParam,LPARAM lParam)
& & //wParam是注册热键的ID,lParam是关于按键的信息
& & if(wParam==1001)
& & return 0;
###对话框###
1、在资源页面,对话框上双击可为这个对话框创建类
(1)DoDataExchange()初始化对话框控件到变量,或者变量获取对话框的数据
(2)UpdateData(); 来调用DoDataExchange()
2、创建模态对话框:
(1)MyNewD &//实例化一个对话框的对象
(2)md.DoModal(); & &//初始化一个模态对话框 &自动创建
3、创建非模态对话框:
(需要是成员变量)
(1)MyNewD &//实例化一个对话框的对象
(2)md.Create(ID(ID号),this(父窗口指针)); & &//初始化一个模态对话框
4、创建按钮:
(2)cbt.Create(_T(&按钮&),BS_DEFPUSHBUTTON | WS_VISIBLE|WS_CHILD,CRect(0,0,100,100)[巨型区域],this,111[id]);
&*(3)cbt.DestroyWindow();销毁
5、在创建窗口都时候都会创建一个句柄变量 m_hWnd 可通过btn.m_hWnd 直接访问
6、GetWindowText(str) & &获取窗口的文本
7、SetWindowText(str) 修改窗口的文本
8、GetDlgItem(int ID) & &通过ID获取对话框上控件的指针
9、GetDlgItemText(str) & 通过文本获取对话框上的指针
10、SetDlgItemText(ID,str) & 修改窗口的文本
11、GetDlgItemInt();
12、SetDlgItemInt();
13、通过发送消息来获取窗口的文本
& & (调用api函数前面用::)
& & ::SendMessage(GetDlgItem(int ID).m_hWnd[句柄],WM_GETTEXT[消息类型],10,ch);
14、对话框发送消息
& & SendDlgItemMessage(ID,WM_GETTEXT[消息类型],ch);
15、获得窗口大小GetWindowRect(&CRect)
16、设置窗口大小SetWindowPos();
####################外挂常用API########################
1、通过标题获取窗口句柄 & FindWindow(NULL,&QQ&);
2、获取窗口的信息 & GetWindowRect(HWND.RECT)
3、改变鼠标位置坐标SetCursorPos(x,y); & &相对于显示器window
4、得到鼠标的位置坐标GetCursorPos(&POINT);
5、获取窗口进程ID &GetWindowThreadProcessId()
6、打开指定进程 OpenProcess();
7、读取指定进程内存数据 ReadProcessMemory();
8、发送消息 SendMessage/PostMessage
9、查找子窗口的句柄
函数原型:HWND ChildWindowFromPoint (HWND hWnd, LONG xPoint, LONG yPoint);
函数功能:返回父窗口中包含了指定点的第一个子窗口的句柄。
函数参数:hWnd 父窗口的句柄
xPoint 点的X坐标,以像素为单位
yPoint 点的Y坐标,以像素为单位
返回值:发现包含了指定点的第一个子窗口的句柄。如未发现任何窗口,则返回hWnd(父窗口的句柄)。如指定点位于父窗口外部,则返回零。
&!--------读取其他程序内存---样例---------------&
{//获得窗口句柄
HWND gameh = ::FindWindow(NULL,_T(&QQ游戏 - 连连看角色版&));
//会的窗口进程ID
::GetWindowThreadProcessId(gameh,&processid);
//打开指定的进程
HANDLE processH = ::OpenProcess(PROCESS_ALL_ACCESS,false,processid);
//读取指定的进程 内存数据
LPCVOID pbase = (LPCVOID)0x00189F78 ;//基址
LPVOID nbuffer = (LPVOID)GAMEDARA; //读取数据存放的地址
ReadProcessMemory(processH,pbase,nbuffer,11*19,&byread);
&1-------调用其他程序 call 样例-----------------&
//获取窗口的句柄
HWND game_hwnd = ::FindWindow(NULL,_T(&WG_MyGame1&));
LPDWORD pid = & //指针引用
//获取窗口进程ID
::GetWindowThreadProcessId(game_hwnd,pid);
//打开指定进程
HANDLE processH = ::OpenProcess(PROCESS_ALL_ACCESS,false,id);
//创建远程线程 调用call
CreateRemoteThread(processH,NULL,0,(LPTHREAD_START_ROUTINE)(0x003B1950),NULL,0,&tid);
#######################钩子##############################
1、::SetWindowsHookEx(WH_MOUSE,MouseProc,NULL,GetCurrentThreadId());
*参数1:钩子过滤的消息
*参数2:钩子回调方法
*参数3:创建钩子的进程
*参数4:钩子的进程ID
2、BOOL UnhookWindowsHookEx(HHOOK hhk); &//移除钩子
例子1 &屏蔽本进程的键盘操作
:SetWindowsHookEx(WH_KEYBOARD,KeyboardProcs,NULL,GetCurrentThreadId());
LRESULT CALLBACK KeyboardProcs(
&int code, & & & // hook code
&WPARAM wParam, &// virtual-key code
&LPARAM lParam & // keystroke-message information
例子2 &屏蔽所有程序
1、创建DLL程序 中的钩子函数
extern &C& _declspec(dllexport) void SetHook(){
SetWindowsHookEx(WH_MOUSE,KeyboardProcs,g_hInst,0);
实例句柄:g_hInst 通过DllMain 入口函数的 hinstDLL获得
2、在EXE程序中调用DLL中的 钩子函数SetHook
//动态添加链接库
typedef void(_cdecl* FunctionAdd)();
HINSTANCE hD//dll句柄;
hDll=LoadLibrary(_T(&Hook3.dll&));
if (NULL==hDll)
MessageBox(_T(&Dll加载失败&));
FunctionAdd MyH
MyHook=(FunctionAdd)GetProcAddress(hDll,&SetHook&);
if(MyHook == NULL)
MessageBox(TEXT(&没找到函数&));
例子3 挂载到其他进程(比如QQ)
1、创建DLL程序 中的钩子函数
HWND hwndQQ = FindWindow(NULL,TEXT(&QQ&));
//取得线程ID(标示符)
if(!hwndQQ)
MessageBox(0,TEXT(&没有获得窗口句柄!!&),TEXT(&问好&),MB_OK);
DWORD tid = GetWindowThreadProcessId(hwndQQ,NULL);
MessageBox(0,TEXT(&没有获得QQ进程ID!!&),TEXT(&问好&),MB_OK);
MessageBox(0,TEXT(&成功挂载到QQ进程&),TEXT(&问好&),MB_OK);
SetWindowsHookEx(WH_MOUSE,KeyboardProcs,g_hInst,tid);
2、在EXE程序中调用DLL中的 钩子函数SetHook
//动态添加链接库
typedef void(_cdecl* FunctionAdd)();
HINSTANCE hD//dll句柄;
hDll=LoadLibrary(_T(&Hook3.dll&));
if (NULL==hDll)
MessageBox(_T(&Dll加载失败&));
FunctionAdd MyH
MyHook=(FunctionAdd)GetProcAddress(hDll,&SetHook&);
if(MyHook == NULL)
MessageBox(TEXT(&没找到函数&));
21、资源对话框 CFileDialog();
/*******************绘图********************/
CDC *pDC= GetDC();
pDC-&MoveTo(20,20);
pDC-&LineTo(100,100);
ReleaseDC(pDC);
CClientDC派生于CDC
CClientDC dc(this);
dc.MoveTo(0,0);
dc.LineTo(100,100);
//自己调用ReleaseDC
/**获取父窗口的DC*/
//CClientDC dc(GetParent());
/**获得桌面窗口的DC*/
/*CClientDC dc(GetDesktopWindow());
dc.MoveTo(0,0);
dc.LineTo(100,100);
/**获取最顶层窗口DC*/
CPen pen(PS_SOLID,12,RGB(255,0,0));
CWindowDC dc(GetDesktopWindow());//获得桌面DC
/*CPen *Poldpen = dc.SelectObject(&pen);
dc.MoveTo(0,0);
dc.LineTo(100,100);
dc.SelectObject(Poldpen);
/**画方块*/
/*CBrush brush(RGB(0,222,0));
CRect crect(100,100,200,200);
dc.FillRect(crect,&brush);
/**加载位图*/
bitmap.LoadBitmap(IDB_BITMAP1);
CBrush brush2(&bitmap);
CRect crect2(200,200,300,300);
dc.FillRect(crect2,&brush2);
字体颜色,设置字体背景色
dc.SetTextColor(RGB(255,0,0));
dc.SetBkColor(TRANSPARENT);
########文件对话框############
filter=&所有文件(*.bmp)|*.bmp|BMP(*.bmp)|&;
CFileDialog fdlg(TRUE , NULL,NULL,OFN_HIDEREADONLY,filter,NULL);
if(fdlg.DoModal() == IDOK){
& BmpPathName = fdlg.GetPathName();//获取路径
/*******************IO操作******************************/
1.函数功能
用来读写一个数据块。
2.一般调用形式
fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
1.fread(&id,1,10,f)就是把f里面的值读到id里面,每次读1个字节,一共读10次,或者把id里面的值都读完,不到10次也会停止。
2.fwrite(&id,1,10,f)就是把id里面的值读到f里面,每次读1个字节,一共读10次或是fread(&id,10,1,f)就是把id里面的值读到里面,每次读10个字节,一共读1次。
/******************************GetDC和CreateDC有什么区别? &******************/
GetDC和releaseDC配对。
CreateDC和DeleteDC配对。
GetDC是获取别人的。不能修改别人的参数。
GreateDC是自己创建的。可以任意修改的。
CreateDC和CreateIC区别
CreateDC(TEXT(&DISPLAY&),NULL,NULL,NULL),
获取整个屏幕的设备描述表。等同与:GetDC(NULL);
CreateIC(TEXT(&DISPLAY&),NULL,NULL,NULL),
只用于获取设备描述表的属性信息,不能用于绘图。
获取客户区大小
GetClientRect(hWnd,&rect);
获取桌面大小
HWND hWnd = ::GetDesktopWindow(); //桌面句柄
GetWindowRect(hWnd,&rect);//
创建对话框
cd.DoModal();//创建模态对话框
CMyD//注意cd生命周期
cd.Create( UINT nIDTemplate, CWnd* pParentWnd = NULL );//创建非模态对话框
cd.showWindow(SW_SHOW);
设置窗口样式属性
SetWindowPos();
关闭对话框
PostMessage(WM_CLOSE );
SendMessage(WM_DESTROY);
//DestoryWindow(); &
//EndDialog(0); &
DC填充为透明
CBrush *cb = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
发送重绘消息
Invalidate();
重绘相应函数
OnEraseBkgnd(CDC* pDC)
CStringArray---CString对象
CPtrArray---void类型指针
SetMenu(NULL);
创建窗口样式
WS_BORDER 创建一个有边框的窗口&
WS_CAPTION 创建一个有标题栏的窗口&
WS_CHILDWINDOW(or WS_CHILD)创建一个子窗口(不能与WS_POPUP一起使用)&
WS_CLIPCHILDREN 当在父窗口内绘制时,把子窗口占据的区域剪切在外,即不在该区域内绘图 &
WS_CLIPSIBLINGS 裁剪相互有关系的子窗口,不在被其它子窗口覆盖的区域内绘图,仅与WS_CHILD一起使用 &
WS_DISABLED 创建一个初始被禁止的窗口&
WS_DLGFRAME 创建一个有双边框但无标题的窗口&
WS_HSCROLL 创建一个带水平滚动杠的窗口&
WS_VSCROLL 创建一个带垂直滚动杠的窗口&
WS_ICONIC 创建一个初始为图标的窗口,仅可以与WS_OVERLAPPEDWINDOWS一起使用&
WS_MAXIMIZE 创建一个最大尺寸的窗口&
WS_MINIMIZE 创建一个最小尺寸的窗口(即图标)&
WS_MAXIMIZEBOX 创建一个带有极大框的窗口&
WS_MINIMIZEBOX 创建一个带有极小框的窗口&
WS_OVERLAPPED 创建一个重叠式窗口,重叠式窗口带有标题和边框&
WS_POPUP 创建一个弹出式窗口,不能与WS_CHILD一起使用&
WS_SYSMENU 窗口带有系统选单框,仅用于带标题栏的窗口&
WS_THICKFRAME 创建一个边框的窗口,使用户可以直接缩放窗口&
WS_VISIBLE 创建一个初始可见的窗口
WS_EX_ACCEPTFILES = 0x
指明了一个已创建视窗具有拖拽文件功能
WS_EX_APPWINDOW = 0x
强制一个可见的顶级视窗到工具栏上
WS_EX_CLIENTEDGE = 0x
使一个视窗具有凹陷边框
WS_EX_COMPOSITED = 0x
Windows XP:将一个窗体的所有子窗口使用双缓冲按照从低到高方式绘制出来,参阅remark项.如果这个视窗已经使用经典样式中的下列值CS_OWNDC , CS_CLASSDC,WS_EX_CONTEXTHELP.此参数将不能使用.
这个样式的视窗在标题栏上有一个问号,当拥护点击着个问号,鼠标变成一个问号,如果用户然后点击一个子窗口,子窗就会收到一条WM_HELP消息.子窗口 将把这个消息传递给他的父进程,这个父进程将用HELP_WM_HELP命令调用WinHelp函数.这个帮助程序常常弹出一个典型的包含其子窗口的帮助 的窗口
本参数不能和WS_MAXIMIZEBOX ,WS_MINIMIZEBOX一起使用
WS_EX_CONTROLPARENT = 0x
这个窗体本身包含了参与对话框导航的子窗口.如果使用了这个参数,对话框管理器?入这个窗体的子窗口,当执行导航操作时,比如按住TAB键,方向键.
WS_EX_DLGMODALFRAME = 0x
创建一个具有双边框的窗口,这个窗口可以通过使用WS_CAPTION样式被创建成具有一个标题栏的窗口.
WS_EX_LAYERED = 0x
Windows 2000/XP:创建一个分层的窗口.注意,这不能用在子窗口上.同样,如果窗口具有CS_OWNDC ,CS_CLASSDC样式,这也不用使用.
WS_EX_LAYOUTRTL = 0x
阿拉伯以及西伯来版本的98/ME,2000/XP创建一个水平起点在右边的窗口.越往左边水平坐标值变大.
WS_EX_LEFT = 0x
创建一个窗口具有一般的左对齐属性.此为默认
WS_EX_LEFTSCROLLBAR = 0x
如果外壳语言是西伯来,阿拉伯,或者其他阅读顺序的语言,竖滚动条将会在客户区的左边.对其他语言,此参数忽略.
WS_EX_LTRREADING = 0x
窗体的文字按照从左到右排列.此为默认.
WS_EX_MDICHILD = 0x
创建一个多文档界面的子窗口.
WS_EX_NOACTIVATE = 0x
Windows 2000/XP:一个使用此参数创建的顶级窗口不会变成前台窗口,当用户点击他时.系统不会将此窗口放到前台,当用户最小化或者关闭这个前台窗口.
要激活这样的窗口,使用SetActiveWindow或者SetForegroundWindow函数
此类型的窗口默认不会显示在任务栏上.要强行将这样的窗口显示到任务栏上,使用WS_EX_APPWINDOW参数.
WS_EX_NOINHERITLAYOUT = 0x
Windows 2000/XP:用此参数创建的窗体不会传递他的窗口布局给他的子窗口
WS_EX_NOPARENTNOTIFY = 0x
指明一个使用此参数创建的窗口不发送WM_PARENTNOTIFY消息给他的父窗口当这个窗口被创建或者销毁的时候.
WS_EX_OVERLAPPEDWINDOW = (WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE)
联合了WS_EX_CLIENTEDGE and WS_EX_WINDOWEDGE styles
WS_EX_PALETTEWINDOW = (WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST)
联合了WS_EX_WINDOWEDGE, WS_EX_TOOLWINDOW, and WS_EX_TOPMOST styles.
WS_EX_RIGHT = 0x
窗口具有一般的右对齐属性.这要依靠这个窗口的类.这个样式只有外壳语言是西伯来语,阿拉伯语等其他阅读顺序的语言才有影响,否则此样式别忽略&
对文字标签或者编辑框使用WS_EX_RIGHT样式跟使用SS_RIGHT 或者 ES_RIGHT影响是一样的.对按钮使用这个样式跟使用BS_RIGHT 和BS_RIGHTBUTTON的影响是一样的
WS_EX_RIGHTSCROLLBAR = 0x
竖直滚动条显示在客户区的右边.默认.
WS_EX_RTLREADING = 0x
如果外壳语言是西伯来语,阿拉伯语等支持排列方式阅读的语言,窗体文字将按照从右到左的阅读顺序.对其他语言,此样式忽略.
WS_EX_STATICEDGE = 0x
创建一个窗口具有三维边框用来表示一个项目不接受用户输入.
WS_EX_TOOLWINDOW = 0x
创建一个工具窗口:也就是说,这个窗口被用来做浮动工具条.一个工具窗口具有一个比一般的标题栏短的标题栏,并且系统在标题栏使用小字体.作为工具窗口, 它不显示在工具栏上.当用户用ALT+TAB切换时也不出现在对话框中.如果一个工具窗有系统菜单,那么他的图标不会被显示在标题栏上.但是,你可以通过 键入ALT+TAB或者右键点击标题栏来显示系统菜单.
WS_EX_TOPMOST = 0x
指明用此参数创建的窗口将会放在所有顶级视窗上并且停在最上面.即使这个窗口不是活动的.要添加或者移除他,使用SetWindowPos函数.
WS_EX_TRANSPARENT = 0x
用此参数创建的的窗口在他同一线程的窗口被绘制前将不会被绘制.这个窗口透明的显示,因为同一线程的窗口已经绘制出来
要脱离这个限制激活透明,使用SetWindowRgn函数.
WS_EX_WINDOWEDGE = 0x
使一个窗口具有凸起的边框.
获取屏幕宽度,长度(全屏显示)
int nFullWidth = GetSystemMetrics(SM_CXSCREEN);
int nFullHeight = GetSystemMetrics(SM_CYSCREEN);
在PreCreateWindow中
cs.style |= WS_MAXIMIZE;
int nW & & & & &// window width
int nH & & & & &// window height
nWidth=GetSystemMetrics(SM_CXSCREEN);//获得系统的分辨率
nHeight=GetSystemMetrics(SM_CYSCREEN);//获得系统的分辨率
::SetWindowLong(this-&m_hWnd,GWL_EXSTYLE,GetWindowLong(this-&m_hWnd, GWL_EXSTYLE) | WS_EX_LAYERED);
::SetLayeredWindowAttributes(
this-&m_hWnd,
RGB(255,255,255),
& & LWA_COLORKEY &// &LWA_ALPHA&
AlphaBlend
dc.TransparentBlt(0,0,,&MemDc,0,0,,RGB(255,255,15));
用于设定当前前景色的混合模式。
输入字符背景颜色为透明
SetBkMode(TRANSPARENT)
防止背景闪烁
设置背景画刷
static CBrush brush(RGB(255,0,0));
SetClassLong(this-&m_hWnd,GCL_HBRBACKGROUND,(LONG)(HBRUSH)brush);
防止背景闪烁
重载OnEraseBkgnd(CDC* pDC)直接返回TRUE
重要的消息
WM_ACTIVATE //窗口被激活或者取消激活
WM_ACTIVATEAPP
WM_CLOSE //关闭窗口,在消息WM_DESTROY 和 WM_QUIT传递之间被发送
WM_MOVE //移动到新的位置时候触发
WM_MOVEING //正在移动触发
WM_SIZEING
WM_CHAR ASCLL码
wparam---包含所按下键的ASCALL 码
lparam---包含一个按位编码的状态矢量,
WM_KEYDOWN / WM_KEYUP 扫描码 Scan code
GetAsyncKeyState()
按键详解见《windows游戏变成大师技巧》第三章,处理重要消息事件
用win32写个window窗口,
4、按钮子控件
模拟点击按钮---向控件发送信息
获取计算机的信息
GetSystemMetrics();
LOWORD(lparam);
HIWORD(lparam);
全屏窗口中去掉边框(默认的凹凸边框)
在OnCreate中添加
ModifyStyleEx(WS_EX_CLIENTEDGE, NULL);
不在标题栏中显示应用
在创建的时候添加
ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW);
添加热键,快捷键
1、//注册热键
RegisterHotKey(GetSafeHwnd(),1001,NULL,VK_F2);
2、监听OnHotKey消息
&判断 if(wParam==1001) &是否等于注册ID
修改程序图标
&VS2010生成的exe文件图标是用Icon下几个图标中value值最小的,
&顺序为IDR_MAINFRAME、IDR_ICONTETYPE、新加 的,
&所以想更改生成的exe文件图标,只要保证图标的value值是Icon下几个图标中最小的就可以了
添加系统托盘
1、添加m_nid为类成员变量类型为NOTIFYICONDATA
2、添加成员函数ToTray()
m_nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA);&
m_nid.hWnd = this-&m_hW&
m_nid.uID = IDR_MAINFRAME;&
m_nid.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP ;&
m_nid.uCallbackMessage = WM_SHOWTASK;
m_nid.hIcon = LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));&
wcscpy(m_nid.szTip,_T(&魏亚恒是大帅哥&));&
Shell_NotifyIcon(NIM_ADD,&m_nid);//在托盘区添加图标&
3、定义消息#define WM_SHOWTASK WM_USER+1,添加消息WM_SHOWTASK的响应函数afx_msg LRESULT onShowTask(WPARAM wParam,LPARAM lParam);
& &在BEGIN_MESSAGE_MAP(CUserDlg, CDialog)和END_MESSAGE_MAP()之间加代码:
& &ON_MESSAGE(WM_SHOWTASK,onShowTask)
3、编写该函数:
LRESULT CUserDlg::onShowTask(WPARAM wParam,LPARAM lParam){&
&//wParam接收的是图标的ID,lParam接收的是鼠标的行为&
if(wParam!=IDR_MAINFRAME)&
& &return 1;&
switch(lParam){&
case WM_RBUTTONUP://右键起来时弹出快捷菜单,这里只有一个“关闭”&
& & LPPOINT lpoint=new tagPOINT;&
& & ::GetCursorPos(lpoint);//得到鼠标位置&
& & menu.CreatePopupMenu();//声明一个弹出式菜单&
& & //增加菜单项“关闭”,点击则发送消息WM_DESTROY给主窗口(已&
& & //隐藏),将程序结束。&
& & menu.AppendMenu(MF_STRING,WM_DESTROY,&退出&);&
& & //确定弹出式菜单的位置&
& & menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint-&x,lpoint-&y,this);&
& & //资源回收&
& & HMENU hmenu=menu.Detach();&
& & menu.DestroyMenu();&
case WM_LBUTTONDBLCLK://双击左键的处理&
& & & & this-&ShowWindow(SW_SHOWNORMAL);//简单的显示主窗口
return 0;&
然后在OnInitDialog函数中调用ToTray();
4、为使应用程序退出时图标消失,映射WM_DESTROY消息,在OnDestroy()函数中加入:&
::Shell_NotifyIcon(NIM_DELETE,&m_tnid);
5、至此,托盘图标程序的常规功能我们均已实现。我们还可以通过Shell_NotifyIcon()函数的调用实现不同状态下图标的改变,就象金山词霸在主窗口打开与暂停取词时图标有所改变一样。 它常 用来显示一些系统的状态。如:系统时间,音量控制以及其它的一些图标
总体的思想就是这样的
添加自定义右键菜单/ 托盘菜单
LPPOINT lpoint=new tagPOINT;&
::GetCursorPos(lpoint);//得到鼠标位置&
menu.LoadMenu(IDR_MENU1);
&CMenu* pPopup = menu.GetSubMenu(0);
pPopup-&TrackPopupMenu(TPM_LEFTALIGN| TPM_RIGHTBUTTON,lpoint-&x,lpoint-&y,this);&
//资源回收&
HMENU hmenu=menu.Detach();&
menu.DestroyMenu();&
失去焦点菜单消失
SetForegroundWindow();&
从磁盘读取位图
LoadImage();
文件操作/文件写入/文本写入文件
FILE *fp1;
fp1 = fopen(&E:\\a.txt&,&w&);//只读方式打开文件a.txt
fputs(&hello world!&,fp1);
fclose(fp1);
CString转成char *
CString str=_T(&hello kitty 12345 hello jackson&);
int len=str.GetLength();
char *buffer=new char[len+1];
memset(buffer,0,len+1);
WideCharToMultiByte(CP_OEMCP, NULL, (LPCWSTR)str, -1,NULL, 0, NULL, FALSE);
WideCharToMultiByte(CP_OEMCP, NULL, (LPCWSTR)str, -1,(LPSTR)buffer, len, NULL, FALSE);
buffer[len]='\0';
char * 转成 CString
char *str=&abcd1234&;
//预转换,得到所需空间的大小
int wcsLen = ::MultiByteToWideChar(CP_ACP, NULL, inputbuffer, strlen(inputbuffer), NULL, 0);
//分配空间要给'\0'留个空间,MultiByteToWideChar不会给'\0'空间
wchar_t* wszString = new wchar_t[wcsLen + 1];
::MultiByteToWideChar(CP_ACP, NULL, inputbuffer, strlen(inputbuffer), wszString, wcsLen);
//最后加上'\0'
wszString[wcsLen] = '\0';
//附加到CString对象上
content.Append(wszString);
文件操作/创建文件
HANDLE CreateFile(
&LPCTSTR lpFileName, & // 指向文件名的指针&
&DWORD dwDesiredAccess, & &// 访问模式(写 / 读)&
&DWORD dwShareMode, & & & &// 共享模式&
&LPSECURITY_ATTRIBUTES lpSecurityAttributes, // 指向安全属性的指针&
&DWORD dwCreationDisposition, & // 如何创建&
&DWORD dwFlagsAndAttributes, & // 文件属性&
&HANDLE hTemplateFile & &// 用于复制文件句柄&
类型及说明
lpFileName
String ,要打开的文件的名字
dwDesiredAccess
Long ,如果为 GENERIC_READ 表示允许对设备进行读访问;如果为 GENERIC_WRITE 表示允许对设备进行写访问(可组合使用);如果为零,表示只允许获取与一个设备有关的信息
dwShareMode
Long ,零表示不共享; FILE_SHARE_READ 和 / 或 FILE_SHARE_WRITE 表示允许对文件进行共享访问
lpSecurityAttributes
SECURITY_ATTRIBUTES ,指向一个 SECURITY_ATTRIBUTES 结构的指针,定义了文件的安全特性(如果操作系统支持的话)
dwCreationDisposition
Long ,下述常数之一:
CREATE_NEW
创建文件;如文件存在则会出错
CREATE_ALWAYS
创建文件,会改写前一个文件
OPEN_EXISTING
文件必须已经存在。由设备提出要求
OPEN_ALWAYS
如文件不存在则创建它
TRUNCATE_EXISTING
讲现有文件缩短为零长度
dwFlagsAndAttributes
Long ,一个或多个下述常数
FILE_ATTRIBUTE_ARCHIVE
标记归档属性
FILE_ATTRIBUTE_COMPRESSED
将文件标记为已压缩,或者标记为文件在目录中的默认压缩方式
FILE_ATTRIBUTE_NORMAL
FILE_ATTRIBUTE_HIDDEN
隐藏文件或目录
FILE_ATTRIBUTE_READONLY
文件为只读
FILE_ATTRIBUTE_SYSTEM
文件为系统文件
FILE_FLAG_WRITE_THROUGH
操作系统不得推迟对文件的写操作
FILE_FLAG_OVERLAPPED
允许对文件进行重叠操作
FILE_FLAG_NO_BUFFERING
禁止对文件进行缓冲处理。文件只能写入磁盘卷的扇区块
FILE_FLAG_RANDOM_ACCESS
针对随机访问对文件缓冲进行优化
FILE_FLAG_SEQUENTIAL_SCAN
针对连续访问对文件缓冲进行优化
FILE_FLAG_DELETE_ON_CLOSE
关闭了上一次打开的句柄后,将文件删除。特别适合临时文件
也可在 Windows NT 下组合使用下述常数标记:
SECURITY_ANONYMOUS , SECURITY_IDENTIFICATION , SECURITY_IMPERSONATION , SECURITY_DELEGATION , SECURITY_CONTEXT_TRACKING , SECURITY_EFFECTIVE_ONLY
hTemplateFile
Long ,如果不为零,则指定一个文件句柄。新文件将从这个文件中复制扩展属性
获取窗口位置
GetWindowRect();
动态链接库创建
动态链接库导出函数
_declspec(dllexport) int add(int a,int b){
return a+b;
使用动态链接库
1、把lib文件放到工程目录中
2、项目---& 属性---&配置属性--&链接器----&输入---附加依赖项, &加入库名,如: my_API.
2.1、或是在cpp源文件中用代码#pragma comment(lib,&my_API.lib&)代替.
3、首先声明函数
& &extern int &add(int a,int b);
_declspec(dllimport) int &add(int a,int b); 效率更高
初始化一个curl
curl = curl_easy_init(); &
为curl设置参数
curl_easy_setopt(curl,)
PHP中的CURL函数库(Client URL Library Function)
curl_close — 关闭一个curl会话
curl_copy_handle — 拷贝一个curl连接资源的所有内容和参数
curl_errno — 返回一个包含当前会话错误信息的数字编号
curl_error — 返回一个包含当前会话错误信息的字符串
curl_exec — 执行一个curl会话
curl_getinfo — 获取一个curl连接资源句柄的信息
curl_init — 初始化一个curl会话
curl_multi_add_handle — 向curl批处理会话中添加单独的curl句柄资源
curl_multi_close — 关闭一个批处理句柄资源
curl_multi_exec — 解析一个curl批处理句柄
curl_multi_getcontent — 返回获取的输出的文本流
curl_multi_info_read — 获取当前解析的curl的相关传输信息
curl_multi_init — 初始化一个curl批处理句柄资源
curl_multi_remove_handle — 移除curl批处理句柄资源中的某个句柄资源
curl_multi_select — Get all the sockets associated with the cURL extension, which can then be &selected&
curl_setopt_array — 以数组的形式为一个curl设置会话参数
curl_setopt — 为一个curl设置会话参数
curl_version — 获取curl相关的版本信息
curl_init()函数的作用初始化一个curl会话,curl_init()函数唯一的一个参数是可选的,表示一个url地址。
curl_exec()函数的作用是执行一个curl会话,唯一的参数是curl_init()函数返回的句柄。
curl_close()函数的作用是关闭一个curl会话,唯一的参数是curl_init()函数返回的句柄。
多字节转宽字符(unicode)
MultiByteToWideChar
DWORD dwNum = MultiByteToWideChar (CP_ACP, 0, (char *)buffer, -1, NULL, 0);
wchar_t *pwT
pwText = new wchar_t[dwNum];
if(!pwText){
& &delete []pwT
MultiByteToWideChar (CP_ACP, 0, (char *)buffer, -1, pwText, dwNum);
我们在最开始学习MFC的时候,毫无疑问会遇到这样的问题。
VC6的设置:多字节。
vs的默认设置:Unicode,在属性中可以改成多字节。
多字节编码:char,string,CStringA。
Unicode编码:wchar_t,wstring,CStringW。
注意:如果项目是Unicode,那么CString就被定义为CStringW,否则就是CStringA。
LPSTR = char*;LPCSTR = const char*;
LPWSTR = wchar_t*;LPCWSTR = const wchar_t*;
至于LPCTSTR也是根据项目字符集来定义为LPCWSTR(Unicode)或LPCSTR(多字节)。
OK,上面的定义很明显了,注意用的时候别弄混了,我觉得最好的方式是,使用wchar_t和wstring(api大多使用unicode,即使是多字节版本也是把多字节转成unicode再去调用unicode版api),我不太喜欢CString。
接下来就是转换:
// C++
char* 到 string:string str(&char&); 或者string str = &char&;
string 到 char*:const char* ch = str.c_str();
wchar_t* 和 wstring与上相同。
char* 到 CStringA:CStringA str(&char&);
CStringA 到 char*:const char* ch = str.operator LPCSTR(); (注意:反对使用GetBuffer,因为使用这个,必须要ReleaseBuffer,而且很多时候没必要去分配空间)
wchar_t* 和 CStringW与上相同。
// 字符集之间转换
char* 到 wchar_t*:CA2W a2w(&char&); &const wchar_t* wch = a2w.operator LPCWSTR();
wchar_t* 到 char*:CW2A w2a(L&wchar_t&); const char* ch = w2a.operator LPCSTR(); &(注意:反对使用_T(&chs&)这种方式,程序字符集在一开始就该确定,而且最好选择Unicode)
关于CA2W和CW2A这两个类,可以在atlconv.h中找到源代码,其实就是对WideCharToMultiByte和MultiByteToWideChar的封装。
鼠标拖拽窗口。窗口移动
if(LisDown){
&int nX = point.x - prePoint.x;
&int nY = point.y - prePoint.y;
&CRect & &&
&GetWindowRect(&rect); &&
&rect.OffsetRect(nX,nY);
&MoveWindow(rect, TRUE); & &
指针。内存分配
不在任务栏显示,隐藏程序
ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW);//从任务栏中去掉.
设置窗口样式,窗口风格
ModifyStyleEx
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:19477次
排名:千里之外
原创:12篇
转载:28篇
(2)(1)(3)(1)(1)(2)(1)(1)(4)(4)(2)(16)(2)

我要回帖

更多关于 华为适合女生用的手机 的文章

 

随机推荐