日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

《windows程序设计》第二章学习心得

發布時間:2024/4/17 windows 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《windows程序设计》第二章学习心得 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Unicode簡介

Unicode是ASCII字符編碼的一個擴展。Unicode用的是16位字符編碼,而不是像ASCII那樣的7位編碼。

---------------------------------------------------------------------------------------------------------------------------------------------

C語言中寬字符是基于wchar_t數據類型的。

typedef unsigned short wchar_t;

wchar_t c = 'A';等同于wchar_t c = L'A';

---------------------------------------------------------------------------------------------------------------------------------------------

wchar_t str[1000] = {0};

wcscpy(str, L"Hello");
wcscpy(str, TEXT("Hello"));???

C++標準庫函數提供了字符和字符串的操作函數,并提供了其UNICODE版本,如:
char *strcpy(char *strDestination, const char *strSource);
wchar_t *wcscpy(wchar_t *strDestination, const wchar_t *strSource); wcscpy()即為strcpy()的寬字符版本,與_T類似的,Visual C++提供了類似的同名函數:

#ifdef UNICODE??????
#define _tcscpy wcscpy?
#else?????
#define _tcscpy strcpy?
#endif?

_tcscpy
在編譯時會根據條件被替換,
如果是 非UNICODE 工程,它就被替換為 strcpy
UNICODE 工程被替換為 wcscpy

?

?

寬字符的輸出問題:

wchar_t str[] = L"qwe123";

C語言輸出:wprintf(L"%s\n", str);

C++輸出:wcout << str << endl;

相比如果輸出漢字的話:

wchar_t str[] = L"哇哈哈";setlocale(LC_ALL, "");wcout << str << endl;wprintf(L"%s\n", str);

需要本地化函數輸出。

char*?setlocale(int?category,?const?char* locale);

category:為locale分類,表達一種locale的領域方面,通常有下面這些預定義常量:LC_ALL、LC_COLLATE、LC_CTYPE、LC_MESSAGES、LC_MONETARY、LC_NUMERIC、LC_TIME,其中 LC_ALL 表示所有其它locale分類的并集。
locale:為期望設定的locale名稱字符串,在Linux/Unix環境下,通常以下面格式表示locale名稱:language[_territory][.codeset][@modifier],language 為 ISO 639 中規定的語言代碼,territory 為 ISO 3166 中規定的國家/地區代碼,codeset 為字符集名稱。

C 和 C++ 的標準庫分別有自己的 locale 操作方法,C 標準庫的 locale 設定函數是 setlocale(),而 C++ 標準庫有 locale 類和流對象的 imbue() 方法。

locale.h是C程序設計語言標準函數庫的一個頭文件,聲明了C語言本地化函數.?這些函數用于在處理多種自然語言的軟件編程設計時,把程序調整到特定的區域設置.?這些區域設置影響到C語言標準庫的輸入/輸出函數.

-----------------------------------------------------------------------------------------------------------------------------------------------------

在使用寬字符的時候,字符串的字符長度并沒有改變,改變的只是字節的長度。

#include <iostream> #include <cstdlib> using namespace std;int main() {wchar_t str[] = L"12345";cout << "sizeof(str) = " << sizeof(str) << endl;cout << "sizeof(wcslen) = " << wcslen(str) << endl;return 0; }輸出:

sizeof(str) = 12
sizeof(wcslen) = 5
請按任意鍵繼續. . .

-------------------------------------------------------------------------------------------------------------------------------------------------------
學習過程中,出現了MSVCRTD.lib(crtexew.obj) : error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup

出現這個的原因是:

我接著使用了先前編輯windowsGUI程序使用的入口還是WinMain,而此時是W32控制臺程序,沒有進行轉化。

解決方案見:http://blog.csdn.net/lgh1992314/article/details/8701358

MessageBox的使用:

VS2010下默認是UNICODE編碼,所以進行MessageBox輸出的時候得注意編碼方式。

1、我們可以強制使用ANSI編碼方式,即MessageBoxA。

#include <windows.h> #include <stdio.h>int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {char str[1024] = {0};sprintf(str, "%s","12345");MessageBoxA(NULL, str, str, 0);return 0; }
2、使用UNICODE編碼,注意user32.dll里并沒有MessageBox的入口點,僅僅是簡單的#define MessageBoxW?MessageBox

#include <windows.h> #include <stdio.h>int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {wchar_t str[1024] = {0};wsprintf(str, L"%s",L"哇哈啊哈");MessageBox(NULL, str, str, 0);return 0; }-------------------------------------------------------------------------------------------------------------------------------------------

如何定義UNICODE標識符?

UNICODE標識符的定義要在所有源文件之上,當然包括windows.h,加上一句 #define UNICODE

--------------------------------------------------------------------------------------------------------------------------------------------

在windows程序中不能使用cin、cout、scanf等標準輸入輸出函數。

------------------------------------------------------------------------------------------------------------------------------

格式化的消息框-----顯示視頻顯示器的寬度和高度。

#include <windows.h> #include <stdio.h> #include <tchar.h>int CDECL MessageBoxPrintf(TCHAR *szCaption, TCHAR *szFormat, ...) {TCHAR szBuffer [1024];va_list pArgList;va_start(pArgList, szFormat);_vsntprintf(szBuffer, sizeof(szBuffer)/sizeof(TCHAR), szFormat, pArgList);va_end(pArgList);return MessageBox(NULL, LPWSTR(szBuffer), LPWSTR(szCaption), 0); }int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE PrevInstance, LPSTR lpCmdLine, int iCmdShow) {int cxScreen, cyScreen;cxScreen = GetSystemMetrics(SM_CXSCREEN);cyScreen = GetSystemMetrics(SM_CYSCREEN);MessageBoxPrintf(TEXT("Screen"), TEXT("The screen is %i pixels wide by %i pixels high."), cxScreen, cyScreen); }

顯示效果:



轉載于:https://www.cnblogs.com/lgh1992314/archive/2013/03/20/5835161.html

總結

以上是生活随笔為你收集整理的《windows程序设计》第二章学习心得的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。