jjzjj

c++ - ShowCursor(FALSE) 不在控制台应用程序上隐藏光标

coder 2024-06-12 原文

我知道这听起来像是一个重复的问题,但请相信我,事实并非如此。

我已经提到了这个question ,但没有太大帮助,因为我正在尝试使用 控制台应用程序 并且回答者自己告诉他不知道 ShowCursor(FALSE) 不适用于控制台应用程序的原因。

thread也没有帮助我。

这是我尝试过的:

使用 ShowCursor():

while(ShowCursor(false)>=0); //did not work

我开始怀疑是因为msdn里面的这个语句: 当 Windows 启动时,它会检查您是否有鼠标。如果是,则将游标显示计数初始化为零;否则,它被初始化为负数

我想也许在最新的 Windows 中,它无法将连接的鼠标或触控板识别为已安装的鼠标,也许这就是它不起作用的原因。下面的代码表明情况并非如此:

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 secs\n";
}

也不行。 这也不起作用:

SetCursor(LoadCursor(NULL, NULL));

编辑:

使用 LoadImage

也没用。

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() 的修改后的工作版本。您必须将光标资源文件包含到您的 visual studio 项目中。从 here 下载游标或创建您自己的。

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);
}

这会将普通箭头光标替换为透明箭头光标。如果你想隐藏所有其他光标,如文本、加载、手形光标等,你必须单独隐藏它们。如果您不希望出现这种情况,那么您应该像许多评论者指出的那样选择退出控制台应用程序。

希望这对您有所帮助。

关于c++ - ShowCursor(FALSE) 不在控制台应用程序上隐藏光标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43110704/

有关c++ - ShowCursor(FALSE) 不在控制台应用程序上隐藏光标的更多相关文章

  1. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  2. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  3. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  4. ruby - 默认情况下使选项为 false - 2

    这是在Ruby中设置默认值的常用方法:classQuietByDefaultdefinitialize(opts={})@verbose=opts[:verbose]endend这是一个容易落入的陷阱:classVerboseNoMatterWhatdefinitialize(opts={})@verbose=opts[:verbose]||trueendend正确的做法是:classVerboseByDefaultdefinitialize(opts={})@verbose=opts.include?(:verbose)?opts[:verbose]:trueendend编写Verb

  5. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

    刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

  6. ruby-on-rails - form_for 中不在模型中的自定义字段 - 2

    我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢

  7. Ruby Readline 在向上箭头上使控制台崩溃 - 2

    当我在Rails控制台中按向上或向左箭头时,出现此错误:irb(main):001:0>/Users/me/.rvm/gems/ruby-2.0.0-p247/gems/rb-readline-0.4.2/lib/rbreadline.rb:4269:in`blockin_rl_dispatch_subseq':invalidbytesequenceinUTF-8(ArgumentError)我使用rvm来管理我的ruby​​安装。我正在使用=>ruby-2.0.0-p247[x86_64]我使用bundle来管理我的gem,并且我有rb-readline(0.4.2)(人们推荐的最少

  8. ruby-on-rails - 带 Spring 锁的 Rails 4 控制台 - 2

    我正在使用Ruby2.1.1和Rails4.1.0.rc1。当执行railsc时,它被锁定了。使用Ctrl-C停止,我得到以下错误日志:~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`gets':Interruptfrom~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`verify_server_version'from~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.

  9. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

  10. ruby-on-rails - openshift 上的 rails 控制台 - 2

    我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新ruby​​gems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems

随机推荐