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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

WinMain中的Console与main中的Window

發布時間:2024/4/18 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WinMain中的Console与main中的Window 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.如何在WinMain中創建一個Console 調用AllocConsole分配一個Console資源;調用GetStdHandle獲得OS的標準設備(輸入,輸出或錯誤),此函數返回一個句柄,若要使用標準C庫函數,則需要根據獲得的句柄轉化為文件描述符;將此描述符與輸出綁定就可以將它視為stdout/stdin/stderr了。
#include <windows.h> #include <stdio.h> #include <io.h> #include <fcntl.h> int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { ?? DWORD dwBytesWritten; char temp[1]; ?? char* msg1 = "第一條消息/n"; ?? char* msg2 = "第二條消息/n"; ?? char* msg3 = "第三條消息./n"; ?? char* msg4 = "第四條消息/n"; ?? char* msg5 = "第五條消息/n"; ?? //新建一個Console ?? AllocConsole(); ?? //獲得標準輸出的Handle ?? HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);???? ?? //向標準輸出中寫入數據 ?? WriteFile(handle, msg1, strlen(msg1), &dwBytesWritten, NULL); ?? WriteFile(handle, msg2, strlen(msg2), &dwBytesWritten, NULL); ?? ?? //從文件Handle獲得FD ?? int hCrt = _open_osfhandle((long)handle,_O_TEXT);??? ?? //標準C函數調用 ?? write(hCrt, msg3, strlen(msg3));????????????????????????? ?? FILE * hf = _fdopen( hCrt, "w" );??????????????????? ?? char buf[2]; ?? setvbuf( hf, buf, _IONBF, 1 ); ?? //綁定hf至標準輸出 ?? *stdout = *hf; ?? fprintf(hf, msg4);??????????????????????????????????????? ?? printf(msg5); ?? //獲得標準輸入 ?? HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE);????????????? // return an OS file handle ?? ReadFile(hIn, temp, 1, &dwBytesWritten, NULL); ?? ?? //釋放Console ?? FreeConsole(); ?? return (0); }
? 2.如何在main中創建一個窗口并應用消息 將控制臺與創建的窗口分開,我創建一個線程,線程中調用CreateWindow,第一個參數設置為系統預定的”Edit”類。模塊句柄由函數GetModuleHandle獲得。
#include <windows.h> #include <stdio.h> DWORD WINAPI mainGUI( LPVOID lp) { ?HMODULE hInstance= 0; ?hInstance = GetModuleHandle(NULL); ?HWND?hWnd;? ?MSG msg; ?//創建一個新的窗口 ?hWnd = CreateWindow("EDIT", "由main創建的消息", ?? WS_OVERLAPPEDWINDOW, ?? CW_USEDEFAULT, ?? CW_USEDEFAULT, ?? CW_USEDEFAULT, ?? CW_USEDEFAULT, ?? NULL,NULL, ?? hInstance, ?? NULL); ?if (!hWnd) ???? ?return (1); ?//綁定hWnd與hWindow,向hWindow發送的消息由此線程處理 ?*(HWND*)lp = hWnd; ?ShowWindow(hWnd, SW_SHOW); ?UpdateWindow(hWnd); ?while (GetMessage(&msg, NULL, NULL, NULL)) ?{ ????? TranslateMessage(&msg); ????? DispatchMessage(&msg); ?} ?return (msg.wParam); } int main(int argc, char* argv[]) { ?? DWORD ID;?HWND?hWindow; ?? char szOutput[64]; ?? CreateThread(NULL,0,mainGUI, &hWindow, NULL,&ID); ?? printf("This console created the window above./n "); ?? while (true) { ????? scanf("%s", szOutput); ????? if (!strcmp(szOutput, "quit")) ???????? ?break; ???? ?//發送WM_SETTEXT消息 ????? SendMessage(hWindow,WM_SETTEXT, strlen(szOutput), (LPARAM)szOutput); ?? } ?? return 0; }
? 正如您所看到的,雖然VC在創建工程時要求我們指定是一個ConsoleGUI工程,此兩個事例說明GUICUI基本上沒有什么本質的區別。 原文:http://www.codeguru.com/cpp/w-d/console/article.php/c3957/ ? 與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的WinMain中的Console与main中的Window的全部內容,希望文章能夠幫你解決所遇到的問題。

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