//WindowsProject3.cpp: 定义应用程序的入口点。 // #include "stdafx.h" #define _WINSOCK_DEPRECATED_NO_WARNINGS #include #include #include #include #pragma comment(lib,"WS2_32.lib") #include "WindowsProject2.h" #include #define MAX_LOADSTRING 100 // 全局变量: HINSTANCE hInst; // 当前实例 WCHAR szTitle[MAX_LOADSTRING]; // 标题栏文本 WCHAR szWindowClass[MAX_LOADSTRING]; // 主窗口类名 // 此代码模块中包含的函数的前向声明: ATOM MyRegisterClass(HINSTANCE hInstance); BOOL InitInstance(HINSTANCE, int); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM); void MySock(); void MyCom(); int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow) { UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); // TODO: 在此放置代码。 // 初始化全局字符串 LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); LoadStringW(hInstance, IDC_WINDOWSPROJECT2, szWindowClass, MAX_LOADSTRING); MyRegisterClass(hInstance); // 执行应用程序初始化: if (!InitInstance(hInstance, nCmdShow)) { return FALSE; } HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINDOWSPROJECT2)); MSG msg; // 主消息循环: while (GetMessage(&msg, nullptr, 0, 0)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } return (int)msg.wParam; } // // 函数: MyRegisterClass() // // 目的: 注册窗口类。 // ATOM MyRegisterClass(HINSTANCE hInstance) { WNDCLASSEXW wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WINDOWSPROJECT2)); wcex.hCursor = LoadCursor(nullptr, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_WINDOWSPROJECT2); wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL)); return RegisterClassExW(&wcex); } struct MyStruct { wchar_t name[100]; int age; }; // // 函数: InitInstance(HINSTANCE, int) // // 目的: 保存实例句柄并创建主窗口 // // 注释: // // 在此函数中,我们在全局变量中保存实例句柄并 // 创建和显示主程序窗口。 // BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { MyStruct *m = new MyStruct; wcscpy_s(m->name, L"king"); m->age = 17; hInst = hInstance; // 将实例句柄存储在全局变量中 HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, m); if (!hWnd) { return FALSE; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; } // // 函数: WndProc(HWND, UINT, WPARAM, LPARAM) // // 目的: 处理主窗口的消息。 // // WM_COMMAND - 处理应用程序菜单 // WM_PAINT - 绘制主窗口 // WM_DESTROY - 发送退出消息并返回 // // LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { WCHAR mb_title[30] = L"My application"; MyStruct* m; if (message == WM_CREATE) { CREATESTRUCT *pCreate = reinterpret_cast(lParam); m = reinterpret_cast(pCreate->lpCreateParams); LPTSTR lpsz = new TCHAR[10]; _itot_s(m->age, lpsz, 10, 10); MessageBox(hWnd, lpsz, m->name, MB_OKCANCEL); SetWindowLongPtr(hWnd, GWLP_USERDATA, (LONG_PTR)m); } else { LONG_PTR ptr = GetWindowLongPtr(hWnd, GWLP_USERDATA); m = reinterpret_cast(ptr); } switch (message) { case WM_COMMAND: { int wmId = LOWORD(wParam); // 分析菜单选择: switch (wmId) { case IDM_ABOUT: DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); break; case IDM_EXIT: DestroyWindow(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } } break; case WM_PAINT: { PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd, &ps); // TODO: 在此处添加使用 hdc 的任何绘图代码... FillRect(hdc, &ps.rcPaint, (HBRUSH)(COLOR_WINDOW + 1)); EndPaint(hWnd, &ps); } break; case WM_DESTROY: PostQuitMessage(0); break; case WM_CLOSE: wcscat_s(mb_title, 30, L"s"); if (MessageBox(hWnd, L"Really quit?", mb_title, MB_OKCANCEL) == IDOK) { DestroyWindow(hWnd); } MyCom(); // Else: User canceled. Do nothing. return 0; //break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; } // “关于”框的消息处理程序。 INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { UNREFERENCED_PARAMETER(lParam); switch (message) { case WM_INITDIALOG: return (INT_PTR)TRUE; case WM_COMMAND: if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) { EndDialog(hDlg, LOWORD(wParam)); return (INT_PTR)TRUE; } break; } return (INT_PTR)FALSE; } void MySock() { WSADATA data; //定义WSADATA结构体对象 WORD w = MAKEWORD(2, 0); //定义版本号码 char sztext[] = "欢迎你\r\n"; //定义并初始化发送到客户端的字符数组 ::WSAStartup(w, &data); //初始化套接字库 SOCKET s, s1; //定义连接套接字和数据收发套接字句柄 s = ::socket(AF_INET, SOCK_STREAM, 0); //创建TCP套接字 sockaddr_in addr, addr2; //定义套接字地址结构 int n = sizeof(addr2); //获取套接字地址结构大小 addr.sin_family = AF_INET; //初始化地址结构 addr.sin_port = htons(75); addr.sin_addr.S_un.S_addr = INADDR_ANY; ::bind(s, (sockaddr*)&addr, sizeof(addr)); //绑定套接字 ::listen(s, 5); //监听套接字 printf("服务器已经启动\r\n"); //输出提示信息 while (true) { s1 = ::accept(s, (sockaddr*)&addr2, &n); //接受连接请求 if (s1 != NULL) { printf("%s已经连接上\r\n", inet_ntoa(addr2.sin_addr)); ::send(s1, sztext, sizeof(sztext), 0); //向客户端发送字符数组 } ::closesocket(s); //关闭套接字句柄 ::closesocket(s1); ::WSACleanup(); //释放套接字库 if (getchar()) //如果有输入,则关闭程序 { return; //正常结束程序 } else { ::Sleep(100); //应用睡眠0.1秒 } } } LRESULT CALLBACK MyWindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_COMMAND: { int wmId = LOWORD(wParam); // 分析菜单选择: switch (wmId) { case IDM_ABOUT: DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); break; case IDM_EXIT: DestroyWindow(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } } break; case WM_PAINT: { PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd, &ps); // TODO: 在此处添加使用 hdc 的任何绘图代码... FillRect(hdc, &ps.rcPaint, (HBRUSH)(COLOR_WINDOW + 1)); EndPaint(hWnd, &ps); } break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; } // Register the window class BOOL MyRegisterClass(HINSTANCE hInstance, int nCmdShow) { const wchar_t CLASS_NAME[] = L"Sample Window Class"; WNDCLASS wc = {}; wc.lpfnWndProc = MyWindowProc; wc.hInstance = hInstance; wc.lpszClassName = L"Second"; _T("abc"); RegisterClass(&wc); HWND hwnd = CreateWindowW(L"Second", L"Second", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr); if (hwnd == NULL) { return false; } } void MyCom() { // COM HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE); if (SUCCEEDED(hr)) { IFileOpenDialog * pFileOpen; hr = CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_ALL, IID_IFileOpenDialog, reinterpret_cast (&pFileOpen)); if (SUCCEEDED(hr)) { hr = pFileOpen->Show(NULL); if (SUCCEEDED(hr)) { IShellItem * pItem; hr = pFileOpen->GetResult(&pItem); if (SUCCEEDED(hr)) { PWSTR pszFilePaht; hr = pItem->GetDisplayName(SIGDN_FILESYSPATH, &pszFilePaht); // Display the file name to the user. if (SUCCEEDED(hr)) { MessageBox(NULL, pszFilePaht, L"File Path", MB_OK); CoTaskMemFree(pszFilePaht); } pItem->Release(); } } pFileOpen->Release(); } CoUninitialize(); } }