ShowCursor(FALSE) 不会在控制台应用程序上隐藏光标
ShowCursor(FALSE) does not hide cursor on console application
我知道这听起来可能是一个重复的问题,但相信我,事实并非如此。
我已经提到了这个问题,但没有多大帮助,因为我正在尝试使用console application
,回答者自己告诉他不知道 ShowCursor(FALSE) 不适用于控制台应用程序的原因。
这个线程也没有帮助我。
以下是我尝试过的事情:
使用 ShowCursor():
while(ShowCursor(false)>=0); //did not work
我首先怀疑是因为msdn中的这句话:When Windows starts up, it checks if you have a mouse. If so, then the cursor show count is initialized to zero; otherwise, it is initialized to negative one
.
我想也许在最新的窗口中,它无法将连接的鼠标或触控板识别为已安装的鼠标,也许这就是它不起作用的原因。以下代码显示情况并非如此:
void UsingShowCursor()
{
CURSORINFO info;
info.cbSize = sizeof(CURSORINFO);
cout << ShowCursor(FALSE);
cout << ShowCursor(FALSE);
cout << ShowCursor(FALSE);
GetCursorInfo( &info ); //info.flags is CURSOR_SHOWING
}
因为我得到-1,-2,-3。这意味着初始显示光标计数显然为 0,并且它确实标识了已安装的鼠标。
需要注意的另一件事是,GetCursorInfo()
还表明光标正在显示。
使用 SetCursor()
void UsingSetCursor()
{
HCURSOR prev = SetCursor(NULL);
int i = 0;
while(i++<10)
{
cout<<i<<endl;
Sleep(1000);
}
if( SetCursor(prev) == NULL ) //check if the previos cursor was NULL
cout<<"cursor was hidden and shown after 10 secsn";
}
也行不通。 这也不起作用:
SetCursor(LoadCursor(NULL, NULL));
编辑:
使用加载图像
也没用。
void UsingLoadImage()
{
// Save a copy of the default cursor
HANDLE arrowHandle = LoadImage(NULL, MAKEINTRESOURCE(IDC_ARROW), IMAGE_CURSOR, 0, 0, LR_SHARED);
HCURSOR hcArrow = CopyCursor(arrowHandle);
HCURSOR noCursorHandle = (HCURSOR)LoadImage(NULL, IDC_ARROW, IMAGE_CURSOR,1,1,LR_SHARED); //a single pixel thick cursor so that it wont be visible
HCURSOR noCursor = CopyCursor(noCursorHandle);
SetSystemCursor(noCursor, OCR_NORMAL);
int i =0 ;
while(i++<10)
{
cout<<i<<endl;
Sleep(1000);
}
//revert to previous cursor
SetSystemCursor(hcArrow, OCR_NORMAL);
DestroyCursor(hcArrow);
}
可能有什么错误?我们如何隐藏控制台应用程序的鼠标?
您可以使用LoadImage()来实现您想要的。这是您在问题中引用的函数 UsingLoadImage() 的修改工作版本。您必须将游标资源文件包含在视觉工作室项目中。从此处下载光标或创建自己的光标。
Resource Files->Add->Existng Item
并浏览到 nocursor.cur 文件。
void UsingLoadImage()
{
// Save a copy of the default cursor
HANDLE arrowHandle = LoadImage(NULL, MAKEINTRESOURCE(IDC_ARROW), IMAGE_CURSOR, 0, 0, LR_SHARED);
HCURSOR hcArrow = CopyCursor(arrowHandle);
// Set the cursor to a transparent one to emulate no cursor
HANDLE noCursorHandle = LoadImage(GetModuleHandle(NULL), L"nocursor.cur", IMAGE_CURSOR, 0, 0, LR_LOADFROMFILE); //worked
//HANDLE noCursorHandle = LoadCursorFromFile(L"nocursor.cur"); //this also worked
HCURSOR noCursor = CopyCursor(noCursorHandle);
SetSystemCursor(noCursor, OCR_NORMAL);
int i =0 ;
while(i++<10)
{
cout<<i<<endl;
Sleep(1000);
}
SetSystemCursor(hcArrow, OCR_NORMAL);
DestroyCursor(hcArrow);
}
这会将普通箭头光标替换为透明光标。如果要隐藏所有其他光标,如文本,加载,手形光标等,则必须单独隐藏它们。如果您不希望这种情况,那么您应该选择退出控制台应用程序,正如许多评论者指出的那样。
希望这有帮助。
- 试图在visual studio上用C++创建一个桌面应用程序
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 在C应用程序中运行C++(带有STL)函数
- 使用VerQueryValue检索应用程序的文件描述
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 使用调试/崩溃报告将应用程序部署到客户端
- C++控制台应用程序阻止退出
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 将应用程序从32位移植到64位时出现问题
- 如何改变c++应用程序的视觉效果
- WM_CTLCOLORSTATIC从未在WIN32应用程序中触发
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 示例外壳应用程序显示的 V8 "segmentation fault (core dumped)"错误
- phytec phyBOARD iMX-6在从闪存而不是SD卡运行qt5 opengles应用程序时表现不佳(FPS减半
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 如何从Windows应用程序输出到标准?
- C++应用程序 MySQL odbc 数据库连接错误:在引发"otl_tmpl_exception<>"实例后终止调用
- 如何在 64 位 vb.net Windows 应用程序中引用 32 位 dll
- 如何从Windows Service主函数启动c++本地应用程序(应用程序与控制台交互)?