欢迎使用 FreeCode for VS60/VS2005 Add-in

FreeCode是WinxGui for VS60/VS2005的可视化界面开发插件。

下载:FreeCode2.zip
作者:fox1996 / QWL1996
参见:http://www.winxgui.cn/blog/?p=163

一 安装

VS60菜单 Tools->Customeze…->Add-ins and Macro Files ->Browse…
选择FreeCode.dll安装即可,安装后插件名为 FreeCode for VS60 Add-in,
安装后将有一个新的FreeCode工具栏,目前只有一个功能按钮-类向导,名称为/”Winx Class Wizard”.

VS2005安装
首先注册freecode2005.dll,运行RegFreeCode2005.bat或直接执行regsvr32.exe FreeCode2005.dll即可
编辑FreeCode2005.reg文件,将其中的路径找成实际安装的路径即可
“SatelliteDLLPath”=”e://FreeXCode//sources//bin”
然后打开VS2005->工具->自定义->命令->外接程序
将FreeCode2005拖到工具栏上即可

二 使用
新建或打开一个WINX项目.
按下FreeCode工具栏上的类向导按钮,将打开与MFC的类向导相似的向导界面.

1.Winx Event
可以进行Winx特有的事件的插入和删除操作
Add Event : 插入一个新的事件
Delete Event: 删除一个已有事件,删除后原事件函数的名称为 _winxDEL+事件名.

2.Winx Message
可以对对话框控件和菜单资源进行WINX的命令和通知消息的增加和删除操作:

a.对话框资源和菜单资源的选择:
如果类向导未能正确对类进行资源判断自动选择,可以使用ResourceDialog组合框进行自行选择,菜单资源也可以使用ResourceMenu组合框进行自行选择.

b.增加消息 选择控件或菜单将在Message:窗口出现可供使用的消息代码,使用Add Message按钮将添加出现添加函数对话框,可以对函数进行更改,按确定后添加到下面的列表中.

c.删除消息 在成员函数列表选定不需要的事件处理消息,按Delete Message将其删除,FreeCode将其从列表中删除.注意消息的消除只是在对应的CMDS或NOTIFY表中使用//进行标记,并且对应的函数并没有删除掉.

3.Winx DlgResize
  提供对话框缩放及布局控制。即对WINX_DLGRESIZE的支持
  Add Resize 增加布局控制
  Del Resize 删除布局控制

4.Winx DlgFont
  提供对话框字体的控制,即对WINX_DLGFONT的支持
  需要使用头文件dlgfonts.h来支持
  Add Font 增加控件字体
  Del Font 删除控件字体
  Add DlgFont 提供对话框总的字体控制

5.确定操作和取消
按确定按钮将进行实际的操作,对消息进行增加和删除,按取消按钮将取消更改,直接退出.

6.Class Info
可以显示一个类的基类是什么,以供使用者查看该类是否是winx窗口类.

三 已知问题

1.如果VS60工程包括多个项目,只提供对当前项目的识别支持,

2.目前版本未提供winx类识别机制,使用者可以通过Class Info窗口查看基类的方法判断当前类是否是WINX类,以便进行WINX事件和消息的更改.

3.目前在Winx Message操作中,未加入控件和消息窗口识别功能,故需要使用者在Member Function窗口中自行查看一个消息是否已经添加了.
包含部分其他组件:
/cbparser     CODE::BLOCKS的Parser组件
/resource     WTLHelper的资源组件

 
好的,以下是使用WinHttp发送POST请求的示例代码: ```c++ #include <windows.h> #include <winhttp.h> #include <string> #pragma comment(lib, "winhttp.lib") std::string UnicodeToUtf8(const wchar_t* unicode_str) { int len = WideCharToMultiByte(CP_UTF8, 0, unicode_str, -1, nullptr, 0, nullptr, nullptr); std::string utf8_str(len - 1, '\0'); WideCharToMultiByte(CP_UTF8, 0, unicode_str, -1, &utf8_str[0], len, nullptr, nullptr); return utf8_str; } std::wstring Utf8ToUnicode(const char* utf8_str) { int len = MultiByteToWideChar(CP_UTF8, 0, utf8_str, -1, nullptr, 0); std::wstring unicode_str(len - 1, '\0'); MultiByteToWideChar(CP_UTF8, 0, utf8_str, -1, &unicode_str[0], len); return unicode_str; } bool SendHttpPostRequest(const wchar_t* url, const std::string& data, const std::wstring& headers, std::string& response_data, std::wstring& response_headers) { HINTERNET hSession = nullptr; HINTERNET hConnect = nullptr; HINTERNET hRequest = nullptr; bool result = false; DWORD dwSize = 0; DWORD dwDownloaded = 0; LPSTR pszOutBuffer = nullptr; // Use WinHttpOpen to obtain a session handle. hSession = WinHttpOpen(L"WinHTTP Example/1.0", WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, 0); // Specify an HTTP server. if (hSession) hConnect = WinHttpConnect(hSession, url, INTERNET_DEFAULT_HTTPS_PORT, 0); // Create an HTTP request handle. if (hConnect) hRequest = WinHttpOpenRequest(hConnect, L"POST", nullptr, nullptr, WINHTTP_NO_REFERER, WINHTTP_DEFAULT_ACCEPT_TYPES, WINHTTP_FLAG_SECURE); // Add headers to the request. if (hRequest) WinHttpAddRequestHeaders(hRequest, headers.c_str(), (DWORD)-1L, WINHTTP_ADDREQ_FLAG_ADD); // Send a request. if (hRequest) result = WinHttpSendRequest(hRequest, WINHTTP_NO_ADDITIONAL_HEADERS, 0, (LPVOID)data.c_str(), (DWORD)data.length(), (DWORD)data.length(), 0); // End the request. if (result) result = WinHttpReceiveResponse(hRequest, nullptr); // Get the status code. DWORD statusCode = 0; DWORD statusCodeSize = sizeof(statusCode); if (result) result = WinHttpQueryHeaders(hRequest, WINHTTP_QUERY_STATUS_CODE | WINHTTP_QUERY_FLAG_NUMBER, nullptr, &statusCode, &statusCodeSize, nullptr); // Get the response headers. std::wstring responseHeaders; DWORD headersSize = 0; if (result) { result = WinHttpQueryHeaders(hRequest, WINHTTP_QUERY_RAW_HEADERS_CRLF, WINHTTP_HEADER_NAME_BY_INDEX, nullptr, &headersSize, WINHTTP_NO_HEADER_INDEX); if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) { std::vector<wchar_t> headersBuffer(headersSize / sizeof(wchar_t) + 1); if (WinHttpQueryHeaders(hRequest, WINHTTP_QUERY_RAW_HEADERS_CRLF, WINHTTP_HEADER_NAME_BY_INDEX, &headersBuffer[0], &headersSize, WINHTTP_NO_HEADER_INDEX)) { responseHeaders = &headersBuffer[0]; } } } // Get the response data. if (result) { do { // Check for available data. dwSize = 0; if (!WinHttpQueryDataAvailable(hRequest, &dwSize)) break; // Allocate space for the buffer. pszOutBuffer = new char[dwSize + 1]; if (!pszOutBuffer) break; // Read the data. ZeroMemory(pszOutBuffer, dwSize + 1); if (!WinHttpReadData(hRequest, (LPVOID)pszOutBuffer, dwSize, &dwDownloaded)) break; // Append the data to the response. response_data.append(pszOutBuffer, dwDownloaded); // Free the memory allocated to the buffer. delete[] pszOutBuffer; pszOutBuffer = nullptr; } while (dwSize > 0); } // Close any open handles. if (hRequest) WinHttpCloseHandle(hRequest); if (hConnect) WinHttpCloseHandle(hConnect); if (hSession) WinHttpCloseHandle(hSession); response_headers = responseHeaders; return result; } int wmain(int argc, wchar_t* argv[]) { // 提交数据 std::string data = "username=test&password=test123"; // 访问头 std::wstring headers = L"Content-Type: application/x-www-form-urlencoded\r\n"; headers += L"User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36\r\n"; headers += L"Accept: */*\r\n"; // 发送POST请求 std::string response_data; std::wstring response_headers; if (SendHttpPostRequest(L"sellercentral.amazon.com.au", data, headers, response_data, response_headers)) { std::wprintf(L"Response headers: %s\n", response_headers.c_str()); std::printf("Response data: %s\n", response_data.c_str()); } else { DWORD error = GetLastError(); std::printf("Failed to send HTTP request. Error code: %u\n", error); } return 0; } ``` 在上面的示例代码中,我们使用了`WinHttpOpen`、`WinHttpConnect`、`WinHttpOpenRequest`、`WinHttpAddRequestHeaders`、`WinHttpSendRequest`、`WinHttpReceiveResponse`、`WinHttpQueryHeaders`和`WinHttpReadData`这些WinHttp的API来发送POST请求,并获取响应内容和响应头。其中,`UnicodeToUtf8`和`Utf8ToUnicode`是用来在Unicode和UTF-8之间进行转换的辅助函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值