TCHAR* next_token = NULL; TCHAR*与ATL::CString的间接寻址级别不同
时间: 2023-08-11 17:04:24 浏览: 93
是的,TCHAR*是一种基本数据类型,是一个指向字符的指针,而ATL::CString是一个字符串类,它封装了许多字符串操作函数,可以方便地进行字符串处理。在使用ATL::CString时,可以使用间接寻址符号“->”来调用它的成员函数,而对于TCHAR*则需要使用间接寻址符号“*”来获取指针所指向的字符。因此,它们的间接寻址级别不同。
相关问题
void Form::on_pushButton_clicked() { std::vector<HWND> windows; EnumWindows([](HWND hwnd, LPARAM lParam) -> BOOL { auto& windows = *reinterpret_cast<std::vector<HWND>*>(lParam); if (IsWindowVisible(hwnd)) { windows.push_back(hwnd); } return TRUE; }, reinterpret_cast<LPARAM>(&windows)); for (auto hwnd : windows) { const int max_title_size = 1024; TCHAR title[max_title_size]; GetWindowText(hwnd, title, max_title_size); std::wcout << title << std::endl; } }精简代码
这段代码已经很精简了,但是我们可以进一步简化它。
由于我们只需要获取窗口标题,因此我们可以使用 Qt 提供的 `QWindow::windowTitle()` 函数,而不是调用 Windows API 的 `GetWindowText` 函数。这样可以使代码更加简洁且可移植。
下面是修改后的代码:
```cpp
void Form::on_pushButton_clicked()
{
auto windows = qApp->allWindows();
for (auto window : windows)
{
auto qwindow = dynamic_cast<QWindow*>(window);
if (qwindow && qwindow->winId())
{
qDebug() << "Window Title: " << qwindow->windowTitle();
}
}
}
```
在这个示例中,我们使用 `qApp->allWindows()` 函数获取所有窗口,并将它们存储在 `windows` 变量中。然后遍历所有的窗口,并将它们转换为 `QWindow` 类型。如果转换成功并且 `winId()` 属性值不为零,则输出窗口的标题。注意,这个代码依赖于 Qt 框架,因此可以在不同的操作系统上运行。
// zuoye07.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "zuoye07.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif DWORD BufferSize=1024; char buf[1024]; / // The one and only application object CWinApp theApp; using namespace std; void FileReadWrite_NoBuffer(char*source,char*destination); int _tmain(int argc,TCHAR*angv[],TCHAR*envp[]) { int nRetCode=0; printf("Call FileReadWrite_NoBuffer!\n"); //调用FileReadWrite_NoBuffer(char*source,char*destination)函数 FileReadWrite_NoBuffer("source.txt","nobuffer.txt"); return nRetCode; } void FileReadWrite_NoBuffer(char*source,char*destination) { HANDLE handle_src,handle_dst; DWORD NumberOfByteWrite; bool cycle; char*buffer; buffer=buf; //创建文件source.txt handle_src=CreateFile(source, GENERIC_READ, 0, NULL, OPEN_ALWAYS, FILE_FLAG_NO_BUFFERING, NULL); //创建文件nobuffer.txt handle_dst=CreateFile(destination, GENERIC_WRITE, NULL, NULL, OPEN_ALWAYS, NULL, NULL); //判断文件是否创建失败,若失败打印输出提示信息并退出 if(handle_src==INVALID_HANDLE_VALUE || handle_dst==INVALID_HANDLE_VALUE) { printf("File Create Fail!\n"); exit(1); } cycle=true; while(cycle) { NumberOfByteWrite=BufferSize; //读取文件source.txt if(!ReadFile(handle_src,buffer,NumberOfByteWrite,&NumberOfByteWrite,NULL)) { //读取文件source.txt失败 printf("Read File Error!%d\n",GetLastError()); exit(1); } if(NumberOfByteWrite<BufferSize)cycle=false; //写入文件nobuffer.txt if(!WriteFile(handle_dst,buffer,NumberOfByteWrite,&NumberOfByteWrite,NULL)) { //写入文件nobuffer.txt失败 printf("Write File Error!%d\n",GetLastError()); exit(1); } } //关闭文件句柄(source.txt,nobuffer.txt) CloseHandle(handle_src); CloseHandle(handle_dst); }
这是一段 C++ 代码,主要是实现了一个函数 FileReadWrite_NoBuffer,该函数的作用是将源文件中的内容读取出来,然后写入到目标文件中。在读写过程中,使用了 FILE_FLAG_NO_BUFFERING 参数,表示不使用系统缓存,而是直接读写磁盘。这样做可以避免缓存带来的性能损失,但也会导致读写速度变慢。
阅读全文