锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
#include聽<iostream>
using聽namespace聽std;
//綰跨▼澶勭悊鍑芥暟
DWORD聽WINAPI聽Fun1(LPVOID聽lpParam);
DWORD聽WINAPI聽Fun2(LPVOID聽lpParam);
int聽tickets聽=聽20;
void聽main()
{
聽聽聽聽HANDLE聽hThread1,聽hThread2;
聽聽聽聽hThread1聽=聽CreateThread(NULL,聽0,聽Fun1,聽NULL,聽0,聽NULL);
聽聽聽聽hThread2聽=聽CreateThread(NULL,聽0,聽Fun2,聽NULL,聽0,聽NULL);
聽聽聽聽CloseHandle(hThread1);
聽聽聽聽CloseHandle(hThread2);
聽聽聽聽cin.get();
}
DWORD聽WINAPI聽Fun1(LPVOID聽lpParam)
{
聽聽聽聽while(true)
聽聽聽聽{
聽聽聽聽聽聽聽聽if(tickets聽>聽0)
聽聽聽聽聽聽聽聽聽聽聽聽cout<<"Thread1聽sell聽ticket聽:聽"<<tickets--<<endl;
聽聽聽聽聽聽聽聽else聽break;
聽聽聽聽}
聽聽聽聽return聽0;
}
DWORD聽WINAPI聽Fun2(LPVOID聽lpParam)
{
聽聽聽聽while(true)
聽聽聽聽{
聽聽聽聽聽聽聽聽if(tickets聽>聽0)
聽聽聽聽聽聽聽聽聽聽聽聽cout<<"Thread2聽sell聽ticket聽:聽"<<tickets--<<endl;
聽聽聽聽聽聽聽聽else聽break;
聽聽聽聽}
聽聽聽聽return聽0;
}
鍘熷洜寰堢畝鍗曪紝鍦ㄦ搷浣滅郴緇熼噷閮藉榪囧叧浜庡悓姝ョ殑闂錛岃繖閲岀殑涓や釜綰跨▼涔嬮棿灝辨病鏈夊涓寸晫璧勬簮ticket榪涜鍚屾銆傜被浼間簬鎿嶄綔緋葷粺閲岀殑PV鎿嶄綔錛屽彲浠ュ皢紼嬪簭鏀逛負(fù)錛?br />
#include聽<iostream>
using聽namespace聽std;
//綰跨▼澶勭悊鍑芥暟
DWORD聽WINAPI聽Fun1(LPVOID聽lpParam);
DWORD聽WINAPI聽Fun2(LPVOID聽lpParam);
int聽tickets聽=聽20;
HANDLE聽hMutex;
void聽main()
{
聽聽聽聽hMutex聽=聽CreateMutex(NULL,聽false,聽NULL);
聽聽聽聽HANDLE聽hThread1,聽hThread2;
聽聽聽聽hThread1聽=聽CreateThread(NULL,聽0,聽Fun1,聽NULL,聽0,聽NULL);
聽聽聽聽hThread2聽=聽CreateThread(NULL,聽0,聽Fun2,聽NULL,聽0,聽NULL);
聽聽聽聽CloseHandle(hThread1);
聽聽聽聽CloseHandle(hThread2);
聽聽聽聽cin.get();
}
DWORD聽WINAPI聽Fun1(LPVOID聽lpParam)
{
聽聽聽聽while(true)
聽聽聽聽{
聽聽聽聽聽聽聽聽WaitForSingleObject(hMutex,聽INFINITE);
聽聽聽聽聽聽聽聽if(tickets聽>聽0)
聽聽聽聽聽聽聽聽聽聽聽聽cout<<"Thread1聽sell聽ticket聽:聽"<<tickets--<<endl;
聽聽聽聽聽聽聽聽else聽break;
聽聽聽聽聽聽聽聽ReleaseMutex(hMutex);
聽聽聽聽}
聽聽聽聽return聽0;
}
DWORD聽WINAPI聽Fun2(LPVOID聽lpParam)
{
聽聽聽聽while(true)
聽聽聽聽{
聽聽聽聽聽聽聽聽WaitForSingleObject(hMutex,聽INFINITE);
聽聽聽聽聽聽聽聽if(tickets聽>聽0)
聽聽聽聽聽聽聽聽聽聽聽聽cout<<"Thread2聽sell聽ticket聽:聽"<<tickets--<<endl;
聽聽聽聽聽聽聽聽else聽break;
聽聽聽聽聽聽聽聽ReleaseMutex(hMutex);
聽聽聽聽}
聽聽聽聽return聽0;
}
緙栫▼妗嗕笁涓?IDC_EDIT_PORT(绔彛鍙?錛孖DC_EDIT_REC(鏄劇ず鎺ユ敹鍒扮殑娑堟伅)錛孖DC_EDIT_SEND(杈撳叆鍙戦佸唴瀹?
IP鎺т歡涓涓?IDC_IPADDRESS1
UDPChatDlg.h涓姞鍏?br />#define聽聽聽 WM_RECDATA WM_USER+1
鏉ュ畾涔変竴涓秷鎭彿錛岀敤鏉ュ鐞嗘帴鏀跺埌娑堟伅鐨勪簨浠?br />
鐒跺悗鏄互涓嬫柟娉曞0鏄庯細(xì)
聽聽聽聽bool聽InitSocket(void);
聽聽聽聽static聽DWORD聽WINAPI聽RecProc(LPVOID聽lpParam);
聽聽聽聽afx_msg聽LRESULT聽OnRecData(WPARAM聽wParam,LPARAM聽lParam);
聽聽聽聽afx_msg聽void聽OnBnClickedBtnSend();
娑堟伅鏄犲皠閲屽姞鍏ヤ袱鏉★細(xì)
ON_MESSAGE(WM_RECDATA, OnRecData)//澶勭悊鏀跺埌娑堟伅浜嬩歡
ON_BN_CLICKED(IDC_BTN_SEND, &CTcpChatDlg::OnBnClickedBtnSend)//澶勭悊鎸夐挳鐐瑰嚮浜嬩歡
鑷蟲錛屼竾浜嬪叿澶囷紝鍙瑺涓滈銆?br />
棣栧厛紿楀彛鍒濆鍖栧嚱鏁癘nInitDialog閲屽姞鍏?br />
聽聽聽聽HANDLE聽hThread聽=聽
聽聽聽聽聽聽聽聽CreateThread(NULL,聽0,聽RecProc,聽(LPVOID)m_hWnd,聽0,聽NULL);
聽聽聽聽CloseHandle(hThread);
聽聽聽聽((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS1))->SetAddress(127,聽0,聽0,聽1);
聽聽聽聽SetDlgItemText(IDC_EDIT_PORT,聽_T("6000"));
{
聽聽聽聽WORD聽wVersionRequested;
聽聽聽聽WSADATA聽wsaData;
聽聽聽聽wVersionRequested聽=聽MAKEWORD(聽2,聽2聽);
聽聽聽聽int聽err聽=聽WSAStartup(聽wVersionRequested,聽&wsaData聽);
聽聽聽聽if聽(聽err聽!=聽0聽)聽{
聽聽聽聽聽聽聽聽/*聽Tell聽the聽user聽that聽we聽could聽not聽find聽a聽usable聽*/
聽聽聽聽聽聽聽聽/*聽WinSock聽DLL.聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽*/
聽聽聽聽聽聽聽聽return聽false;
聽聽聽聽}
聽聽聽聽if聽(聽LOBYTE(聽wsaData.wVersion聽)聽!=聽2聽||
聽聽聽聽聽聽聽聽HIBYTE(聽wsaData.wVersion聽)聽!=聽2聽)聽{
聽聽聽聽聽聽聽聽聽聽聽聽/*聽Tell聽the聽user聽that聽we聽could聽not聽find聽a聽usable聽*/
聽聽聽聽聽聽聽聽聽聽聽聽/*聽WinSock聽DLL.聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽*/
聽聽聽聽聽聽聽聽聽聽聽聽WSACleanup(聽);
聽聽聽聽聽聽聽聽聽聽聽聽return聽false;聽
聽聽聽聽}
聽聽聽聽return聽true;
}
DWORD聽WINAPI聽CTcpChatDlg::RecProc(LPVOID聽lpParam)
{
聽聽聽聽HWND聽hWnd聽=聽(HWND)lpParam;
聽聽聽聽//-----------------------------------------------
聽聽聽聽//聽Create聽a聽receiver聽socket聽to聽receive聽datagrams
聽聽聽聽SOCKET聽RecvSocket聽=聽socket(AF_INET,聽SOCK_DGRAM,聽0);
聽聽聽聽if(INVALID_SOCKET聽==聽RecvSocket)
聽聽聽聽{聽聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽::AfxMessageBox(_T("socket鍒涘緩澶辮觸"));
聽聽聽聽聽聽聽聽return聽1;
聽聽聽聽}
聽聽聽聽//-----------------------------------------------
聽聽聽聽//聽Bind聽the聽socket聽to聽any聽address聽and聽the聽specified聽port.
聽聽聽聽SOCKADDR_IN聽RecvAddr;
聽聽聽聽RecvAddr.sin_family聽=聽AF_INET;
聽聽聽聽RecvAddr.sin_port聽=聽htons(6000);
聽聽聽聽RecvAddr.sin_addr.S_un.S_addr聽=聽htonl(INADDR_ANY);
聽聽聽聽if(SOCKET_ERROR聽==聽bind(RecvSocket,聽(SOCKADDR聽*)聽&RecvAddr,聽sizeof(RecvAddr)))
聽聽聽聽{
聽聽聽聽聽聽聽聽closesocket(RecvSocket);
聽聽聽聽聽聽聽聽::AfxMessageBox(_T("bind澶辮觸"));
聽聽聽聽聽聽聽聽return聽1;
聽聽聽聽}
聽聽聽聽//-----------------------------------------------
聽聽聽聽//聽Call聽the聽recvfrom聽function聽to聽receive聽datagrams
聽聽聽聽//聽on聽the聽bound聽socket.
聽聽聽聽int聽retval;
聽聽聽聽char聽RecvBuf[1024];
聽聽聽聽char聽tmpBuf[1024];
聽聽聽聽sockaddr_in聽SenderAddr;
聽聽聽聽int聽SenderAddrSize聽=聽sizeof(SenderAddr);
聽聽聽聽while(true)
聽聽聽聽{
聽聽聽聽聽聽聽聽retval聽=聽recvfrom(RecvSocket,聽
聽聽聽聽聽聽聽聽聽聽聽聽RecvBuf,聽
聽聽聽聽聽聽聽聽聽聽聽聽1024,聽
聽聽聽聽聽聽聽聽聽聽聽聽0,聽
聽聽聽聽聽聽聽聽聽聽聽聽(SOCKADDR聽*)&SenderAddr,聽
聽聽聽聽聽聽聽聽聽聽聽聽&SenderAddrSize);
聽聽聽聽聽聽聽聽if(SOCKET_ERROR聽==聽retval)
聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽CString聽strError;
聽聽聽聽聽聽聽聽聽聽聽聽strError.Format("error聽code聽:聽%d",聽WSAGetLastError());
聽聽聽聽聽聽聽聽聽聽聽聽::AfxMessageBox(strError);
聽聽聽聽聽聽聽聽聽聽聽聽break;
聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽sprintf_s(tmpBuf,聽1024,聽"鏀跺埌%s娑堟伅:聽%s",聽inet_ntoa(SenderAddr.sin_addr),聽RecvBuf);
聽聽聽聽聽聽聽聽//鍙戦佹秷鎭?/span>
聽聽聽聽聽聽聽聽::PostMessage(hWnd,聽WM_RECDATA,聽0,聽(LPARAM)tmpBuf);
聽聽聽聽}
聽聽聽聽//娓呯悊宸ヤ綔
聽聽聽聽closesocket(RecvSocket);
聽聽聽聽WSACleanup();
聽聽聽聽return聽0;//鎴愬姛
}
LRESULT聽CTcpChatDlg::OnRecData(WPARAM聽wParam,LPARAM聽lParam)
{
聽聽聽聽CString聽str((char*)lParam);
聽聽聽聽CString聽origin;
聽聽聽聽GetDlgItemText(IDC_EDIT_REC,origin);
聽聽聽聽str聽+=聽"\r\n";
聽聽聽聽str聽+=聽origin;
聽聽聽聽SetDlgItemText(IDC_EDIT_REC,str);
聽聽聽聽SetDlgItemText(IDC_EDIT_SEND,聽_T(""));
聽聽聽聽return聽0;
}
void聽CTcpChatDlg::OnBnClickedBtnSend()
{
聽聽聽聽DWORD聽dwIP;
聽聽聽聽((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS1))->GetAddress(dwIP);
聽聽聽聽CString聽strPort;
聽聽聽聽GetDlgItemText(IDC_EDIT_PORT,聽strPort);
聽聽聽聽//鍒涘緩鍙戦佸湴鍧淇℃伅
聽聽聽聽SOCKADDR_IN聽addrTo;
聽聽聽聽addrTo.sin_family聽=聽AF_INET;
聽聽聽聽addrTo.sin_port聽=聽htons(atoi(strPort));
聽聽聽聽addrTo.sin_addr.S_un.S_addr聽=聽htonl(dwIP);
聽聽聽聽CString聽strMsg;
聽聽聽聽GetDlgItemText(IDC_EDIT_SEND,聽strMsg);
聽聽聽聽SOCKET聽sock聽=聽socket(AF_INET,聽SOCK_DGRAM,聽0);
聽聽聽聽if(SOCKET_ERROR聽==聽
聽聽聽聽聽聽聽聽sendto(
聽聽聽聽聽聽聽聽sock,聽strMsg,聽
聽聽聽聽聽聽聽聽strMsg.GetLength()+1,聽0,聽
聽聽聽聽聽聽聽聽(SOCKADDR聽*)&addrTo,聽sizeof(addrTo)
聽聽聽聽聽聽聽聽))
聽聽聽聽{
聽聽聽聽聽聽聽聽CString聽strError;
聽聽聽聽聽聽聽聽strError.FormatMessage("Send聽Failed,聽Error聽Code:聽%d",聽WSAGetLastError());
聽聽聽聽聽聽聽聽MessageBox(strError);
聽聽聽聽}
聽聽聽聽
聽聽聽聽closesocket(sock);
}
浣跨敤windows濂楁帴瀛楃殑緗戠粶灝忕▼搴?------------------
1.Socket鍩烘湰鎿嶄綔
銆(1)鍚姩/緇堟
聽聽聽聽 winsock鍦ㄨ璋冪敤鏃朵互鍔ㄦ侀摼鎺ュ簱鐨勫艦寮忓疄鐜幫紝鎵浠ュ湪瀹冨垵濮嬪寲鏃跺簲棣栧厛璋冪敤WSAStartup鍑芥暟榪涜鍒濆鍖栵紝鍚屾椂紜畾琚皟鐢ㄧ殑winsock鐗堟湰鍙風(fēng)瓑銆?br />
聽聽聽聽WORD聽wVersionRequested;
聽聽聽聽WSADATA聽wsaData;
聽聽聽聽wVersionRequested聽=聽MAKEWORD(聽1,聽1聽);
聽聽聽聽int聽err聽=聽WSAStartup(聽wVersionRequested,聽&wsaData聽);
聽聽聽聽if聽(聽err聽!=聽0聽)聽{
聽聽聽聽聽聽聽聽/*聽Tell聽the聽user聽that聽we聽could聽not聽find聽a聽usable聽*/
聽聽聽聽聽聽聽聽/*聽WinSock聽DLL.聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽*/
聽聽聽聽聽聽聽聽return聽false;
聽聽聽聽}
聽聽聽聽if聽(聽LOBYTE(聽wsaData.wVersion聽)聽!=聽1聽||
聽聽聽聽聽聽聽聽HIBYTE(聽wsaData.wVersion聽)聽!=聽1聽)聽{
聽聽聽聽聽聽聽聽聽聽聽聽/*聽Tell聽the聽user聽that聽we聽could聽not聽find聽a聽usable聽*/
聽聽聽聽聽聽聽聽聽聽聽聽/*聽WinSock聽DLL.聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽*/
聽聽聽聽聽聽聽聽聽聽聽聽WSACleanup(聽);
聽聽聽聽聽聽聽聽聽聽聽聽return聽false;聽
聽聽聽 SOCKET sock = socket(AF_INET, SOCK_STREAM, 0);//嫻佸紡錛孴CP
銆銆SOCKET sock = socket(AF_INET, SOCK_DGRAM, 0);//鏁版嵁鎶ワ紝UDP
銆銆浣跨敤bind鍑芥暟鍙互灝嗕竴涓鎺ュ瓧緇戝畾鍒頒竴涓湴鍧涓?br />銆銆int bind(SOCKET sock, const struct sockaddr* name, int len);//sockaddr鏄竴涓敤鏉ヨ〃紺哄湴
銆銆鍧淇℃伅鐨勭粨鏋?br />銆(3)渚﹀惉錛屾帴鍙楄繛鎺ヤ笌榪炴帴
銆銆listen, accept, connect榪欎笁涓嚱鏁扮敤浜庡緩绔嬮氫俊鐨勮繛鎺ャ?br />銆銆int listen(SOCKET sock, int backlog);//scok蹇呴』鏄竴涓凡緇忕粦瀹氫絾鏄病鏈夎繛鎺ョ殑濂楁帴瀛楋紝
銆銆backlog鐢ㄤ簬璁懼畾鏈澶у彲浠ョ瓑寰呯殑榪炴帴闀垮害
銆銆鎴愬姛璋冪敤listen鍑芥暟鍚庯紝灝卞彲浠ユ帴鍙楀鎴鋒満鐨勮繛鎺ヤ簡銆?br />銆銆SOCKET accept(SOCKET sock, struct sockaddr* addr, int* addrlen);
銆銆鍒版涓鍒囧氨緇紝褰撳鎴鋒満鎯沖埌榪炴帴鏃跺彲浠ヤ嬌鐢╟onnect榪涜榪炴帴銆?br />銆(4)鍙戦侊紝榪炴帴
銆銆鐢ㄤ簬TCP鐨勶細(xì)
銆銆int send(SOCKET sock, const char* buf, int len, int flags);
聽聽聽 int recv(SOCKET sock, char* buf, int len, int flags);
銆銆鐢ㄤ簬UDP鐨勶細(xì)
銆銆int sendto(SOCKET sock, const char* buf, int len, int flags,
銆銆銆銆銆銆銆銆銆銆銆銆銆銆const struct sockaddr* to, int tolen);
聽聽聽 int recvfrom(SOCKET sock, char* buf, int len, int flags,
銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆struct sockaddr* from, int formlen);
2.紺轟緥
銆涓や釜win32鐨勬帶鍒跺彴紼嬪簭錛屼竴涓猅cpSer錛屼竴涓猅cpClient銆?br />銆涓轟簡浣跨敤socket闇瑕佸寘鍚ご鏂囦歡<Winsock2.h>
銆
銆TcpSer錛?br />銆
#include聽<iostream>
#include聽<string>
using聽namespace聽std;
void聽main()
{
聽聽聽聽//鍔犺澆濂楁帴瀛楀簱錛岀増鏈?.1
聽聽聽聽WORD聽wVersionRequested;
聽聽聽聽WSADATA聽wsaData;
聽聽聽聽int聽err;
聽聽聽聽wVersionRequested聽=聽MAKEWORD(聽1,聽1聽);
聽聽聽聽err聽=聽WSAStartup(聽wVersionRequested,聽&wsaData聽);
聽聽聽聽if聽(聽err聽!=聽0聽)聽{
聽聽聽聽聽聽聽聽/*聽Tell聽the聽user聽that聽we聽could聽not聽find聽a聽usable聽*/
聽聽聽聽聽聽聽聽/*聽WinSock聽DLL.聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽*/
聽聽聽聽聽聽聽聽return;
聽聽聽聽}
聽聽聽聽if聽(聽LOBYTE(聽wsaData.wVersion聽)聽!=聽1聽||
聽聽聽聽聽聽聽聽HIBYTE(聽wsaData.wVersion聽)聽!=聽1聽)聽{
聽聽聽聽聽聽聽聽聽聽聽聽/*聽Tell聽the聽user聽that聽we聽could聽not聽find聽a聽usable聽*/
聽聽聽聽聽聽聽聽聽聽聽聽/*聽WinSock聽DLL.聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽*/
聽聽聽聽聽聽聽聽聽聽聽聽WSACleanup(聽);
聽聽聽聽聽聽聽聽聽聽聽聽return;聽
聽聽聽聽}
聽聽聽聽
聽聽聽聽//鍒涘緩濂楁帴瀛?/span>
聽聽聽聽SOCKET聽sockSer聽=聽socket(AF_INET,聽SOCK_STREAM,聽0);
聽聽聽 //鍦板潃緇撴瀯浣?/span>
聽聽聽聽SOCKADDR_IN聽addrSer;
聽聽聽聽addrSer.sin_addr.S_un.S_addr聽聽=聽htonl(INADDR_ANY);
聽聽聽聽addrSer.sin_family聽=聽AF_INET;
聽聽聽聽addrSer.sin_port聽=聽htons(6000);
聽聽聽 //緇戝畾涓庣洃鍚?/span>
聽聽聽聽bind(sockSer,聽(SOCKADDR*)&addrSer,聽sizeof(SOCKADDR));
聽聽聽聽listen(sockSer,聽5);
聽聽聽聽cout<<"Tcp聽Server聽Run!"<<endl;
聽聽聽聽SOCKADDR_IN聽addrClient;
聽聽聽聽int聽len聽=聽sizeof(SOCKADDR);
銆銆//鏀跺埌榪炴帴璇鋒眰錛屽垱寤轟竴涓柊socket鐢ㄤ簬淇濇寔榪炴帴
聽聽聽聽SOCKET聽sockCon聽=聽accept(sockSer,聽(SOCKADDR*)&addrClient,聽&len);
聽聽聽聽while(true)
聽聽聽聽{
聽聽聽聽聽聽聽聽char聽recBuf[100];
聽聽聽聽聽聽聽聽recv(sockCon,聽recBuf,聽100,聽0);
聽聽聽聽聽聽聽聽cout<<"message聽form聽clinet聽:聽"<<recBuf<<endl;
聽聽聽聽}
聽聽聽 //娓呯悊宸ヤ綔
聽聽聽聽closesocket(sockSer);
聽聽聽聽WSACleanup();
}
銆TcpClient錛?br />
#include聽<iostream>
#include聽<string>
using聽namespace聽std;
void聽main()
{
聽聽聽聽//鍔犺澆濂楁帴瀛楀簱
聽聽聽聽WORD聽wVersionRequested;
聽聽聽聽WSADATA聽wsaData;
聽聽聽聽int聽err;
聽聽聽聽wVersionRequested聽=聽MAKEWORD(聽1,聽1聽);
聽聽聽聽err聽=聽WSAStartup(聽wVersionRequested,聽&wsaData聽);
聽聽聽聽if聽(聽err聽!=聽0聽)聽{
聽聽聽聽聽聽聽聽/*聽Tell聽the聽user聽that聽we聽could聽not聽find聽a聽usable聽*/
聽聽聽聽聽聽聽聽/*聽WinSock聽DLL.聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽*/
聽聽聽聽聽聽聽聽return;
聽聽聽聽}
聽聽聽聽if聽(聽LOBYTE(聽wsaData.wVersion聽)聽!=聽1聽||
聽聽聽聽聽聽聽聽HIBYTE(聽wsaData.wVersion聽)聽!=聽1聽)聽{
聽聽聽聽聽聽聽聽聽聽聽聽/*聽Tell聽the聽user聽that聽we聽could聽not聽find聽a聽usable聽*/
聽聽聽聽聽聽聽聽聽聽聽聽/*聽WinSock聽DLL.聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽*/
聽聽聽聽聽聽聽聽聽聽聽聽WSACleanup(聽);
聽聽聽聽聽聽聽聽聽聽聽聽return;聽
聽聽聽聽}
聽聽聽聽
聽聽聽聽//鍒涘緩濂楁帴瀛?/span>
聽聽聽聽SOCKET聽sockClient聽=聽socket(AF_INET,聽SOCK_STREAM,聽0);
聽聽聽聽
聽聽聽聽SOCKADDR_IN聽addrSer;
聽聽聽聽addrSer.sin_addr.S_un.S_addr聽聽=聽inet_addr("127.0.0.1");
聽聽聽聽addrSer.sin_family聽=聽AF_INET;
聽聽聽聽addrSer.sin_port聽=聽htons(6000);
聽聽聽聽cout<<"enter聽your聽message:聽";
聽聽聽聽string聽sendBuf;
聽聽聽聽while(cin>>sendBuf)
聽聽聽聽{
聽聽聽聽聽聽聽聽if(sendBuf聽==聽"q"銆锝滐綔銆sendBuf == "Q")
聽聽聽聽聽聽聽聽聽聽聽聽break;
聽聽聽聽聽聽聽聽//榪炴帴鏈嶅姟鍣?/span>
聽聽聽聽聽聽聽聽connect(sockClient,聽(SOCKADDR*)&addrSer,聽sizeof(SOCKADDR));
聽聽聽聽聽聽聽聽send(sockClient,聽sendBuf.c_str(),聽sendBuf.length()+1,聽0);
聽聽聽聽聽聽聽聽cout<<"enter聽your聽message:聽";
聽聽聽聽}
聽聽聽聽//娓呯悊宸ヤ綔
聽聽聽聽closesocket(sockClient);
聽聽聽聽WSACleanup();
}
鏈鍚庤繕瑕佹敞鎰忕殑灝辨槸錛?/b>鍦╒S涓嬬紪璇戞椂榪樿鍦ㄩ」鐩睘鎬?gt;閰嶇疆灞炴?gt;閾炬帴鍣?gt;鍛戒護(hù)琛岄噷鍔犲叆闄勫姞閫夐」ws2_32.lib
鍚﹀垯閾炬帴鐨勬椂鍊欐壘涓嶅埌涓巗ocket鐩稿叧鐨勫嚱鏁?/font>
瀵歸敭鐩樻搷浣滅殑鍝嶅簲榪囩▼鍩烘湰濡備笅錛?/span>
鐢ㄦ埛鎸変笅涓涓敭鏃訛紝涓庨敭鐩橀┍鍔ㄧ▼搴忥紙 KEYBOARD.DRV 錛夎繘琛屼腑鏂鐞嗗茍璋冪敤 windows 鐢ㄦ埛妯″潡錛?/span> USER.EXE 錛変腑鐨勬湁鍏崇▼搴忔潵鐢熸垚閿洏娑堟伅錛岀劧鍚庢秷鎭鍙戦佸埌緋葷粺鐨勬秷鎭槦鍒椾腑鐢辯浉搴旂殑搴旂敤搴旂敤紼嬪簭榪涜澶勭悊銆傞紶鏍囩殑澶勭悊榪囩▼涓庨敭鐩樼被浼箋備絾鏄敞鎰忔棤璁烘槸榧犳爣榪樻槸閿洏鐨勬墍浜х敓鐨勬秷鎭粡榪囨搷浣滅郴緇熷鐞嗗悗閮藉彧浼?xì)琚彂閫佺粰鐗瑰畾鐨勭獥鍙o紝鍗沖叿鏈夆滆緭鍏ョ劍鐐光濈殑紿楀彛鏉ヨ繘琛屽鐞嗐?/span>
聼聽聽聽聽聽聽聽聽聽聽
閿洏娑堟伅
閿洏娑堟伅閫氬父鍙垎涓烘寜閿秷鎭拰瀛楃娑堟伅涓ょ被錛岀敤鎴鋒寜涓嬫垨鏉懼紑涓涓敭鏃訛紝灝變駭鐢熶竴涓寜閿秷鎭紝褰撲竴涓寜閿粍鍚堜駭鐢熶簡涓涓彲浠ユ樉紺虹殑瀛楁潯鏃訛紝灝變駭鐢熶簡涓涓瓧絎︽秷鎭?/span>
鎸夐敭娑堟伅涓鑸張鍙互鍒嗕負(fù)緋葷粺鎸夐敭鍜岄潪緋葷粺鎸夐敭銆?/span>
緋葷粺鎸夐敭錛氭槸鎸囦嬌鐢ㄤ簡 Alt 絳変笌鐩稿叧杈撳叆閿粍鎴愪駭鐢熺殑娑堟伅錛屼竴鑸繖浜涙秷鎭兘鐢辨搷浣滅郴緇熷唴閮ㄧ洿鎺ュ鐞嗐傚鏋滃簲鐢ㄧ▼搴忓鐞嗕簡榪欎簺緋葷粺閿秷鎭紝灝辮璋冪敤 DefWindowProc 鍑芥暟錛屼互渚夸笉褰卞搷 windows 瀵瑰畠浠殑澶勭悊銆?/span>
闈炵郴緇熸寜閿細(xì)瀵瑰簲浜庨偅浜涗笉浣跨敤緇勫悎閿殑鎸夐敭娑堟伅銆?/span>
鍐嶅鎸夐敭娑堟伅鐨勪袱涓彉閲?/span> wParam 鍜?/span> lParam 鍋氫竴浜涜В閲婏細(xì)錛堝悕鍫傝繕鐪熶笉灝?/span> T_T 錛?/span>
1.聽聽聽聽聽聽聽聽
wParam
鍖呭惈浜嗚瘑鍒寜涓嬮敭鐨勮櫄閿爜錛岃繖浜涚爜鏄敱緋葷粺瀹氫箟鐨勮澶囨棤鍏崇殑銆傚彲浠ュ湪
windows.h
涓壘鍒版壘鍒扮浉鍏沖畾涔夈?/span>
2.聽聽聽聽聽聽聽聽
lParam
32
浣嶇殑鍙橀噺
lParam
鎵琛ㄧず鐨勫惈涔夊彲浠ュ垎涓轟互涓?/span>
7
涓儴鍒?/span>
(1)聽聽聽聽聽 閲嶅璁℃暟浣嶏紙 0~15 浣嶏級 聽聽聽聽聽
琛ㄧず褰撳墠娑堟伅鐨勯噸澶嶆鏁般?/span>
(2)聽聽聽聽聽 OEM 鎵弿鐮侊紙 16~23 浣嶏級
OEM 鎵弿鐮佹槸閿洏鍙戦佺殑鐮佸鹼紝鍥犱負(fù)鏄澶囩浉鍏崇殑甯竴鑸蹇界暐鎺夈?/span>
(3)聽聽聽聽聽 鎵╁睍閿爣蹇楋紙 24 浣嶏級
鍦ㄦ湁 Alt 鎴?/span> Ctrl 閿寜涓嬫椂涓?/span> 1, 鍚﹀垯涓?/span> 0 銆?/span>
(4)聽聽聽聽聽 淇濈暀浣嶏紙 25~28 浣嶏級 聽聽聽聽聽聽聽聽聽聽
緋葷粺淇濈暀錛屼竴鑸笉鐢ㄣ?/span>
(5)聽聽聽聽聽 鍏寵仈鐮侊紙 29 浣嶏級
涓昏鐢ㄦ潵璁板綍鏌愰敭涓?/span> Alt 絳夐敭鐨勭粍鍚堢姸鎬侊紝鑻ユ寜涓?/span> Alt 閿紝褰?/span> WM_SYSKEYDOWN 娑堟伅鍙戦佸埌鏌愪釜嬋媧葷獥鍙f椂錛屽叾鍊間負(fù) 1, 鍚﹀垯涓?/span> 0 銆?/span>
(6)聽聽聽聽聽 閿殑鍏堝墠鐘舵侊紙 30 浣嶏級
鐢ㄤ簬璁板綍鍏堝墠鏌愰敭鐨勭姸鎬併?/span>
(7)聽聽聽聽聽 杞崲鐘舵侊紙 31 浣嶏級
鐢ㄤ簬璁板綍琚緇堟寜涓嬬殑鏌愰敭鎵浜х敓鐨勬秷鎭?/span>
聽聽聽聽聽聽 鍦?/span> WinMain 鍑芥暟閲岀殑娑堟伅寰幆涓寘鍚簡 TranslateMessage 鍑芥暟錛屽畠鐨勪富瑕佸姛鑳芥槸鎶婃寜閿秷鎭漿鍖栦負(fù)瀛楃娑堟伅錛屽嵆鎶婃寜閿墍浜х敓鐨勫師濮嬬殑KEYDOWN/KEYUP娑堟伅杞寲鎴怶M_CHAR娑堟伅銆?/span> 鍚屾牱錛屽瓧絎︽秷鎭篃鍙互鍒嗕負(fù)緋葷粺鍜岄潪緋葷粺娑堟伅涓ょ被銆?/span>
Windows 緋葷粺鏀寔涓ょ被瀛楃闆嗭細(xì) OEM 鍜?/span> ANSI 銆?/span> OEM 鏄?/span> IBM 鐨勫瓧絎﹂泦錛屽湪 windows 涓嬌鐢ㄤ笉澶氾紝鐩墠澶у浣跨敤鐨勬槸 ANSI 瀛楃闆嗐?/span>
聼聽聽聽聽聽聽聽聽聽聽
榧犳爣娑堟伅
1.聽聽聽聽聽聽聽聽 榧犳爣鎿嶄綔
綆鍗曠殑鍗曞嚮鎿嶄綔鍖呭惈浜嗘寜涓嬪拰鏉懼紑榪欎竴鍏ㄨ繃紼嬶紱鑰屽弻鍑?yán)L搷浣滃疄闄呬笂鏄寚鐢ㄦ埛鍦ㄧ煡鏃墮棿鍐咃紙榛樿涓?/span> 0.5 縐掞級鐨勫啀嬈″崟鍑?yán)L搷浣溿?/span>
鍦ㄩ紶鏍囨秷鎭腑錛屽弬鏁?/span> lParam 鍖呭惈浜嗛紶鏍囩殑浣嶇疆錛屼綆瀛楄妭鏄?/span> X 鍧愭爣錛岄珮瀛楄妭鏄?/span> Y 鍧愭爣銆傚弬鏁?/span> wParam 鍒欏寘鍚簡涓涓寚紺哄悇縐嶈櫄閿姸鎬佺殑鍊箋?/span>
閫氳繃鐢ㄦ埛鍖烘秷鎭殑 wParam 鍜?/span> lParam 鍙傛暟錛岀▼搴忓憳灝卞彲浠ョ‘瀹氶紶鏍囩殑浣嶇疆鍜岀姸鎬併?/span>
瀵逛簬榧犳爣鐨勬秷鎭鐞嗭紝涓鑸垎涓轟袱縐嶏紝涓縐嶈瀵?/span> Ctrl 絳夐敭榪涜鐩戣錛屽彟涓縐嶅垯涓嶉渶瑕併備笅闈㈡槸涓涓ず渚?/span>
case WM_LbUTTONDWON:聽聽聽聽聽聽 // 榧犳爣鎸変笅鏃?/span> ctrl 鍜?/span> shift 閮借鎸変笅
聽聽聽聽聽聽 If(( wParam&MK_CONTROL) && ( wParam&MK_SHIFT) )
聽聽聽聽聽聽 鈥?/span>
聽聽聽聽聽聽 break;
case WM_LBUTTONDOWN:聽聽聽聽聽聽 // 涓嶇洃瑙嗙粍鍚堟寜閿?/span>
聽聽聽聽聽聽 鈥?/span>
聽聽聽聽聽聽 break;
姝ゅ錛岃浣跨獥鍙h兘鐩戣鍙屽嚮娑堟伅錛屽繀欏誨湪娉ㄥ唽紿楀彛綾葷殑鏃跺欎嬌璇ョ被鍏鋒湁 CS_DBLCLKS 灞炴ф墠琛岋紝鍚﹀垯鍙兘鏀跺埌涓ゆ潯鍗曞嚮娑堟伅銆?/span>
2.聽聽聽聽聽聽聽聽 鍏夋爣
鍙互浣跨敤緋葷粺鍏夋爣鎴栬呰皟鐢?/span> LoadCursor 鍔犺澆鑷畾涔夊厜鏍囪祫婧?/span>
聼聽聽聽聽聽聽聽聽聽聽
紺轟緥紼嬪簭
鍦ㄤ笅闈㈢殑涓涓緥瀛愪腑錛屾樉紺洪紶鏍囧拰閿洏鐨勬秷鎭搷搴斻傜▼搴忕殑鐢ㄦ埛鍖鴻鍒嗕負(fù)鍥涗釜鍖哄煙錛屾瘡涓尯鍩熼噷鍏夋爣璁劇疆鎴愪笉鍚岀殑鏍峰紡銆傞氳繃鐩戣閿洏鎸夐敭錛屽彲瀵逛竴涓?/span>
10
涓瓧絎﹂暱鐨勭紦鍐插尯閲岃緭鍏ュ瓧絎︼紝騫舵渶鍚庢樉紺哄湪榧犳爣涓婃柟錛岄紶鏍囩Щ鍔ㄦ椂鍚屾椂淇敼瀛楃杈撳嚭鐨勪綅緗傚彲浠ユ寜涓?/span>
BACK
閿垹鎺夊凡緇忚緭鍏ョ殑瀛楃錛岀紦鍐插尯婊℃椂鍐嶈緭鍏ュ拰絀虹殑鏃跺欏垹瀛楃鐨勬搷浣滈兘琚嫆緇濓紝騫剁敤娑堟伅妗嗚繘琛屾彁紺恒備唬鐮佸涓嬶細(xì)
聼聽聽聽聽聽聽聽聽聽聽
璁劇疆鏂囨湰鐨勮澶囩幆澧?/span>
1.聽聽聽聽聽聽聽聽
鑷畾涔夊瓧浣?/span>
鍙互浣跨敤鍑芥暟
CreateFont
鑷畾涔夊瓧浣?/span>
HFONT hFont = HFONT CreateFont(
聽 int nHeight,聽 int nWidth,聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // 瀛椾綋楂橈紝瀹?/span>
聽 int nEscapement,聽聽聽聽聽聽聽聽聽聽 // 鏂囧瓧鐩稿浜庨〉搴曠殑瑙掑害
聽 int nOrientation,聽聽聽聽聽聽聽 // 姣忎釜鏂囧瓧鐩稿浜庨〉搴曠殑瑙掑害
聽 int fnWeight,聽聽聽聽聽聽聽聽 // 瀛椾綋綺楃粏錛岃寖鍥?/span> 0~1000 錛?/span> 400 涓烘甯稿瓧浣擄紝 700 涓洪粦浣?/span>
聽 DWORD fdwItalic,聽聽聽聽聽聽聽聽聽聽 // 鍙栭潪闆跺煎垯涓烘枩浣?/span>
聽 DWORD fdwUnderline,聽聽聽聽聽聽聽 // 鍙栭潪闆跺煎垯涓嬪垝綰?/span>
聽 DWORD fdwStrikeOut,聽聽聽聽聽聽聽 // 鍙栭潪闆跺煎垯涓垝綰?/span>
聽 DWORD fdwCharSet,聽聽聽聽聽聽聽聽聽 // 瀛椾綋鎵灞炲瓧絎﹂泦
聽 DWORD fdwOutputPrecision,聽 // 杈撳嚭綺懼害錛堜竴鑸彇榛樿鍊鹼級
聽 DWORD fdwClipPrecision,聽聽聽 // 鍓綺懼害錛堜竴鑸彇榛樿鍊鹼級
聽 DWORD fdwQuality,聽聽聽聽聽聽聽聽聽 // 杈撳嚭璐ㄩ噺錛堜竴鑸彇榛樿鍊鹼級
聽 DWORD fdwPitchAndFamily,聽聽 // 瀛椾綋闂磋窛鍙?qiáng)瀛椾綋绯诲垪锛堜竴鑸彇榛樿鍊鹼級
聽 LPCTSTR lpszFace聽聽聽聽聽聽聽聽聽聽 // 瀛椾綋鍚?/span>
);
榪欎釜榪欎釜......浠ュ悗榪欐牱寤哄瓧浣撹繕涓嶇瘡姝繪墠鎬挧錛佽屼笖璨屼技
API
閲屽甫榪欎箞澶氭伓蹇冨弬鏁扮殑鏂規(guī)硶榪樹笉灝戯紝浜嗚В涓涓嬪氨琛屼簡銆備竴鑸儏鍐典笅浣跨敤緋葷粺榛樿鎻愪緵鐨勫瓧浣撳氨鍙互浜嗐?/span>
2.聽聽聽聽聽聽聽聽
瀛椾綋鍙ユ焺
windows
緋葷粺鎻愪緵浜嗕竷縐嶅熀鏈瓧浣擄細(xì)
ANSI_FIXED_FONT
錛?/span>
DEFAULT_GUI_FONT
錛?/span>
ANSI_VAR_FONT
DEVICE_DEFAULT_FONT
錛?/span>
SYSTEM_FIXED_FONT
錛?/span>
SYSTEM_FONT
錛堢郴緇熼粯璁ゅ瓧浣擄級
璋冪敤鍑芥暟
GetStockObject
錛堬級鍗沖彲鑾峰緱緋葷粺榛樿瀛椾綋
鑾峰緱瀛椾綋涔嬪悗錛屾湁鏃跺欒繕闇瑕佽緗瓧浣撻鑹插拰鑳屾櫙鑹詫紝鍙互浣跨敤涓嬮潰涓や釜鍑芥暟錛?/span>
SetTextColor聽聽聽聽聽聽聽聽聽 //
璁劇疆瀛椾綋棰滆壊
SetBkColor聽聽聽聽聽聽聽聽聽聽聽 //
璁劇疆鑳屾櫙棰滆壊
聼聽聽聽聽聽聽聽聽聽聽
鏂囨湰杈撳嚭榪囩▼
璁劇疆浜嗗瓧浣撳彞鏌勶紝瀛椾綋鍙?qiáng)瀛椾綋棰滆壊涔嬪悗灏卞彲浠ユ妸璁揪|瓧浣撹緭鍏ュ埌鐩稿簲鐨勮澶囦笂銆?/span>
Windows
緋葷粺鍦ㄦ枃鏈緭鍑轟笂鏈夌偣灝忓皬鐨勫伔鎳掞紝鎶婂緢澶氫簨鎯呴兘涓㈢粰浜嗙▼搴忓憳鏉ュ仛錛屽簲鐢ㄧ▼搴忓繀欏昏嚜宸辯鐞嗘崲琛岋紝鍚庣畫瀛楃鐨勪綅緗瓑杈撳嚭鏍煎紡銆傝櫧鎻愪緵浜嗙紪紼嬬殑鑷敱錛屼絾鏄▼搴忓憳鐨勫伐浣滈噺涔熷彉鐨勯潪甯稿ぇ銆?/span>
鏂囨湰杈撳嚭榪囩▼鍖呮嫭鑾峰彇瀛椾綋淇℃伅錛屾牸寮忓寲鏂囨湰錛岃皟鐢ㄥ嚱鏁拌緭鍑烘枃鏈瓑榪囩▼銆?/span>
1.聽聽聽聽聽聽聽聽
鑾峰彇瀛椾綋淇℃伅
搴旂敤紼嬪簭鍦ㄨ緭鍑哄瓧浣撲箣鍓嶅繀欏誨厛鑾峰彇褰撳墠瀛椾綋鐨勬湁鍏充俊鎭紝鍦?/span>
windows
紼嬪簭涓氳繃璋冪敤
GetTextMetrics
鍑芥暟鏉ヨ幏鍙栧綋鍓嶅瓧浣撶殑淇℃伅銆傚叾褰㈠紡涓猴細(xì)
GetTextMetrics(hdc, &tm);聽聽聽聽聽聽聽聽聽 //tm
涓?/span>
TEXTMETRIC
緇撴瀯
TEXTMETRIC
緇撴瀯涔熼潪甯稿鏉傦紝鍏剁粨鏋勫畾涔夊涓嬶細(xì)
typedef struct tagTEXTMETRIC {
聽 LONG tmHeight;
聽 LONG tmAscent;
聽 LONG tmDescent;
聽 LONG tmInternalLeading;
聽 LONG tmExternalLeading;
聽 LONG tmAveCharWidth;
聽 LONG tmMaxCharWidth;
聽 LONG tmWeight;
聽 LONG tmOverhang;
聽 LONG tmDigitizedAspectX;
聽 LONG tmDigitizedAspectY;
聽 TCHAR tmFirstChar;
聽 TCHAR tmLastChar;
聽 TCHAR tmDefaultChar;
聽 TCHAR tmBreakChar;
聽 BYTE tmItalic;
聽 BYTE tmUnderlined;
聽 BYTE tmStruckOut;
聽 BYTE tmPitchAndFamily;
聽 BYTE tmCharSet;
} TEXTMETRIC, *PTEXTMETRIC;
鍏蜂綋鍚勫睘鎬т笉瑙i噴錛岄渶瑕佹椂鍙互鏌ヨ MSDN 銆?/span>
2.聽聽聽聽聽聽聽聽
鏍煎紡鍖栨枃鏈?/span>
鏍煎紡鍖栧鐞嗕竴鑸拡瀵逛袱縐嶆儏鍐碉紝涓鏄枃鏈涓‘瀹氬悗緇枃鏈殑鍧愭爣錛屼簩鏄湪鎹㈣鏃剁‘瀹氫笅涓琛岀殑鍧愭爣銆?/span>
(1)聽聽聽聽聽 紜畾鍚庣畫鏂囨湰鍧愭爣
搴斿厛鑾峰彇褰撳墠瀛楃鐨勫搴︼紝閫氳繃璁$畻瀛楃涓茶搗濮嬪潗鏍囦笌瀛楃涓插搴︿箣鍜屽嵆鍙緱鍒板悗緇枃鏈殑璧峰鍧愭爣銆?/span>
榪欓噷瑕佷嬌鐢ㄥ埌鍑芥暟錛?/span>
BOOL GetTextExtentPoint32
(
聽聽聽聽聽聽 HDC hdc,
聽聽聽聽聽聽 LPCTSTR lpsxString,聽聽聽 // 鎸囧畾鐨勫瓧絎︿覆
聽聽聽聽聽聽 int nLength,聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // 瀛楃涓蹭腑瀛楃鏁?/span>
聽聽聽聽聽聽 LPSIZE lpSize聽聽聽聽聽聽聽 // 瀛楃涓插搴﹀強(qiáng)楂樺害鐨?/span> SIZE 鏁版嵁緇撴瀯
)
(2)聽聽聽聽聽
紜畾鎹㈣鏃舵枃鏈潗鏍?/span>
閫氳繃璁$畻褰撳墠鏂囨湰琛屽瓧絎︾殑楂樺害涓庤闂撮殧涔嬪拰錛屽嵆鍙緱鍒版崲琛屾椂鏂囨湰鐨勮搗濮嬪潗鏍囷紝鑰屼笂榪頒袱涓暟鍊煎潎鍙氳繃鑾峰彇褰撳墠瀛椾綋淇℃伅寰楀埌銆?/span>
3.聽聽聽聽聽聽聽聽 鏂囨湰杈撳嚭
鏈甯哥敤鐨勬枃鏈緭鍑哄嚱鏁板氨鏄?/span>
TextOut
錛屽叾鍘熷瀷濡備笅錛?/span>
BOOL TextOut
(
聽聽聽聽聽聽 HDC hdc,
聽聽聽聽聽聽 int x, int y,
聽聽聽聽聽聽 LPCTSTR lpString,
聽聽聽聽聽聽 int nCount
聽聽聽聽聽聽 )聼聽聽聽聽聽聽聽聽聽聽
鏂囨湰鎿嶄綔瀹炰緥
鍥犱負(fù)浠g爜澶暱錛屽叏閮ㄨ創(chuàng)鍑烘潵欏甸潰涓嶅ソ鐪嬨傛晠鍙粰鍑?/span>WndProc鍑芥暟鐨勫疄鐜幫紝紼嬪簭鍏跺畠閮ㄥ垎鍙互鍙傝冧互鍓嶇殑絎旇銆?/span>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽UINT聽wParam,聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽LONG聽lParam)
{
聽聽聽聽HDC聽hdc;
聽聽聽聽HFONT聽hFont;聽聽聽聽//瀛椾綋鍙ユ焺
聽聽聽聽PAINTSTRUCT聽ps;
聽聽聽聽TEXTMETRIC聽tm;
聽聽聽聽char聽lpszTx1[]聽=聽"綰㈣壊鐨凷YSTEM瀛椾綋錛氬ソ濂藉涔?fàn)锛屽ぉ澶╁悜涓婂Q?/span>";
聽聽聽聽char聽lpszTx2[]聽=聽"緇胯壊鑷畾涔夊瓧浣擄細(xì)淇濇姢鐪肩潧錛屾敞鎰忎紤鎭紒";
聽聽聽聽char聽lpszTx3[]聽=聽"钃濊壊澶у彿鏂滀綋騫跺甫鏈変笅鍒掔嚎錛?/span>";
聽聽聽聽char聽lpszTx4[]聽=聽"涓よ鏂囨湰杈撳嚭鍒板悓涓琛岄噷錛?/span>";
聽聽聽聽char聽lpszTx5[]聽=聽"浠婂ぉ鐨勫涔?fàn)灏卞埌杩欓噷锛尲湞浣犳垚鍔熷Q?/span>";
聽聽聽聽int聽x聽=聽0,聽y聽=聽0;
聽聽聽聽SIZE聽size;
聽聽聽聽switch(iMsg)
聽聽聽聽{
聽聽聽聽case聽WM_PAINT:
聽聽聽聽聽聽聽聽聽聽聽聽hdc聽=聽BeginPaint(hWnd,聽&ps);
聽聽聽聽聽聽聽聽聽聽聽聽SetTextColor(hdc,聽RGB(255,聽0,聽0));//鏂囨湰涓虹孩鑹?/span>
聽聽聽聽聽聽聽聽聽聽聽聽TextOut(hdc,聽x,聽y,聽lpszTx1,聽strlen(lpszTx1));//瀛椾綋杈撳嚭
聽聽聽聽聽聽聽聽聽聽聽聽GetTextMetrics(hdc,聽&tm);聽聽聽聽//鑾峰彇緋葷粺褰撳墠瀛椾綋
聽聽聽聽聽聽聽聽聽聽聽聽y聽=聽y聽+聽tm.tmHeight聽+聽tm.tmExternalLeading;//璁$畻涓嬩竴琛屽潗鏍?/span>
聽聽聽聽聽聽聽聽聽聽聽聽hFont聽=聽CreateFont
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽(
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽20,0,聽聽聽聽//楂樺害20,聽瀹藉彇0琛ㄧず鐢辯郴緇熼夋嫨鏈浣?jīng)_?/span>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽0,聽0,聽聽聽聽//鏂囨湰鍊炬枩錛屼笌瀛椾綋鍊炬枩閮戒負(fù)0
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽FW_HEAVY,聽聽聽聽//綺椾綋
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽0,0,0,聽聽聽聽聽聽聽聽//闈炴枩浣擄紝鏃犱笅鍒掔嚎錛屾棤涓垝綰?/span>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽GB2312_CHARSET,聽聽聽聽//瀛楃闆?/span>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽OUT_DEFAULT_PRECIS,聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽CLIP_DEFAULT_PRECIS,聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽DEFAULT_QUALITY,聽聽聽聽聽聽聽聽//涓緋誨垪鐨勯粯璁ゅ?/span>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽DEFAULT_PITCH聽|聽FF_DONTCARE,聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽"鑷畾涔夊瓧浣?/span>"聽聽聽聽//瀛椾綋鍚嶇О
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽);
聽聽聽聽聽聽聽聽聽聽聽聽SetTextColor(hdc,聽RGB(0,聽255,聽0));
聽聽聽聽聽聽聽聽聽聽聽聽SelectObject(hdc,聽hFont);
聽聽聽聽聽聽聽聽聽聽聽聽TextOut(hdc,聽x,聽y,聽lpszTx2,聽strlen(lpszTx2));
聽聽聽聽聽聽聽聽聽聽聽聽GetTextMetrics(hdc,聽&tm);聽聽聽聽//灝嗗綋鍓嶅瓧浣撲俊鎭夊叆tm緇撴瀯涓?/span>
聽聽聽聽聽聽聽聽聽聽聽聽y聽=聽y聽+聽tm.tmHeight聽+聽15聽*聽tm.tmExternalLeading;//5鍊嶈闂磋窛
聽聽聽聽聽聽聽聽聽聽聽聽hFont聽=聽CreateFont
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽(
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽40,0,聽聽聽聽//楂樺害40,聽瀹藉彇0琛ㄧず鐢辯郴緇熼夋嫨鏈浣?jīng)_?/span>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽0,聽0,聽聽聽聽//鏂囨湰鍊炬枩錛屼笌瀛椾綋鍊炬枩閮戒負(fù)0
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽FW_NORMAL,聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽1,1,0,聽聽聽聽聽聽聽聽//鏂滀綋錛屼笅鍒掔嚎錛屾棤涓垝綰?/span>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽GB2312_CHARSET,聽聽聽聽//瀛楃闆?/span>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽OUT_DEFAULT_PRECIS,聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽CLIP_DEFAULT_PRECIS,聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽DEFAULT_QUALITY,聽聽聽聽聽聽聽聽//涓緋誨垪鐨勯粯璁ゅ?/span>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽DEFAULT_PITCH聽|聽FF_DONTCARE,聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽"澶у彿瀛椾綋"聽聽聽聽//瀛椾綋鍚嶇О
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽);
聽聽聽聽聽聽聽聽聽聽聽聽SetTextColor(hdc,聽RGB(0,聽0,聽255));
聽聽聽聽聽聽聽聽聽聽聽聽SetBkColor(hdc,聽RGB(160,聽160,聽160));//璁劇疆鑳屾櫙棰滆壊
聽聽聽聽聽聽聽聽聽聽聽聽SelectObject(hdc,聽hFont);
聽聽聽聽聽聽聽聽聽聽聽聽TextOut(hdc,聽x,聽y,聽lpszTx3,聽strlen(lpszTx3));
聽聽聽聽聽聽聽聽聽聽聽聽//鑾峰彇緋葷粺鎻愪緵鐨勫瓧浣?/span>
聽聽聽聽聽聽聽聽聽聽聽聽hFont聽=聽(HFONT)GetStockObject(SYSTEM_FIXED_FONT);
聽聽聽聽聽聽聽聽聽聽聽聽y聽=聽y聽+聽tm.tmHeight聽+聽25聽*聽tm.tmExternalLeading;
聽聽聽聽聽聽聽聽聽聽聽聽SetTextColor(hdc,聽RGB(0,聽0,聽0));
聽聽聽聽聽聽聽聽聽聽聽聽SetBkColor(hdc,聽RGB(255,聽255,聽255));
聽聽聽聽聽聽聽聽聽聽聽聽SelectObject(hdc,聽hFont);
聽聽聽聽聽聽聽聽聽聽聽聽TextOut(hdc,聽x,聽y,聽lpszTx4,聽strlen(lpszTx4));
聽聽聽聽聽聽聽聽聽聽聽聽GetTextExtentPoint32(hdc,聽lpszTx4,聽strlen(lpszTx4),聽&size);//璁$畻楂樺
聽聽聽聽聽聽聽聽聽聽聽聽x聽=聽x聽+聽size.cx;
聽聽聽聽聽聽聽聽聽聽聽聽TextOut(hdc,聽x聽,聽y聽,lpszTx5,聽strlen(lpszTx5));
聽聽聽聽聽聽聽聽聽聽聽聽EndPaint(hWnd,聽&ps);
聽聽聽聽聽聽聽聽聽聽聽聽DeleteObject(hFont);
聽聽聽聽聽聽聽聽聽聽聽聽break;
聽聽聽聽case聽WM_DESTROY:
聽聽聽聽聽聽聽聽PostQuitMessage(0);
聽聽聽聽聽聽聽聽break;
聽聽聽聽default:
聽聽聽聽聽聽聽聽return聽DefWindowProc(hWnd,聽iMsg,聽wParam,聽lParam);
聽聽聽聽}
聽聽聽聽return聽0;
}