当前位置: 首页 > 知识库问答 >
问题:

如何在windows中为Perl6创建弹出窗口?

岑明辉
2023-03-14

我正在使用Windows 7和10rakudo-star-2019.03-x86_64(JIT)。我想知道如何在Perl6中创建一个弹出窗口来向用户提供信息?类似Linux的发送通知或Windows Pro msg(没有网络)

非常感谢,-T

共有2个答案

郁鸿博
2023-03-14

我把你的例子变成了一个模块。非常感谢。

# unit module WinMsg;
# WinMsg.pm6

#`{
Reference: https://stackoverflow.com/questions/59105696/how-can-i-create-pop-up-windows-for-perl6-in-windows
}

use NativeCall;

sub WinMsg( Str $TitleStr, Str $MessageStr ) is export( :WinMsg ) {

   constant WCHAR              = uint16;
   constant INT                = int32;
   constant UINT               = uint32;
   constant HANDLE             = Pointer[void];
   constant LPWCTSTR           = CArray[WCHAR];
   constant MB_ICONEXCLAMATION = 0x00000030;

   # Note: the following two subs have to be embedded

   sub MessageBoxW( HANDLE, LPWCTSTR, LPWCTSTR, UINT ) is native('user32') returns INT { * };

   sub to-c-str( Str $str ) returns CArray[WCHAR]  {
      my @str := CArray[WCHAR].new;
      for ( $str.comb ).kv -> $i, $char { @str[$i] = $char.ord; }
      @str[ $str.chars ] = 0;
      @str;
   }


    # MessageBoxW( my $handle, to-c-str("๘❤ Raku is awesome ❤๖"), to-c-str("Hellö Wαrld"), MB_ICONEXCLAMATION );

    MessageBoxW( my $handle, to-c-str( $MessageStr ), to-c-str( $TitleStr ), MB_ICONEXCLAMATION );
}

试车线:

>perl6 -e "use lib '.'; use WinMsg :WinMsg; WinMsg( 'Super Duper Title', 'What? You were expecting something witty?' );"
沈龙光
2023-03-14

一个简单的Messagebox足够好吗?然后

use NativeCall;

constant WCHAR              = uint16;
constant INT                = int32;
constant UINT               = uint32;
constant HANDLE             = Pointer[void];
constant LPWCTSTR           = CArray[WCHAR];
constant MB_ICONEXCLAMATION = 0x00000030;

sub MessageBoxW( HANDLE, LPWCTSTR, LPWCTSTR, UINT ) is native('user32') returns INT { * };

MessageBoxW( my $handle, to-c-str("๘❤ Raku is awesome ❤๖"), to-c-str("Hellö Wαrld"), MB_ICONEXCLAMATION );

sub to-c-str( Str $str ) returns CArray[WCHAR]
{
    my @str := CArray[WCHAR].new;
    for ( $str.comb ).kv -> $i, $char { @str[$i] = $char.ord; }
    @str[ $str.chars ] = 0;
    @str;
}

对于任何更复杂的东西,我认为GUI目前唯一可用的选项是Tk绑定。

 类似资料:
  • 我想在JavaFX应用程序中创建一个弹出窗口。给我一些想法。 当我点击检查按钮时,它会打开弹出窗口。怎么做?

  • E/AndroidRuntime:致命异常:main process:com.luteraa.luteraaesports,pid:6355 java.lang.nullpointerException:试图在com.luteraa.luteraaesports.bgmicategoryAdapter.OpenDialog(bgmicategoryAdapter.java.access$000(b

  • 我想帮助某人。我想创建一个当我单击按钮时会弹出的JGroup,它必须出现在单击按钮的地方,并且不得影响其他组件。这方面的一个例子是JDateChooser,当您单击该按钮时,一个日历就会出现在那里,但当您单击其他任何地方时,该面板就会消失。我想要的是在弹出时将名称列表放在该面板中。它类似于JPopup菜单,只是当您单击其他任何地方时它必须消失。

  • 问题内容: 我有一个主Frame(称为)和一个弹出式Toplevel(称为)。如何确保用户在“处于活动状态”时无法单击任何内容? 问题答案: 如果您不想隐藏根目录,而只是确保用户只能与弹出窗口进行交互,则可以使用和。 或者 ,您可以使它不可见的根源: 将保留根,但仅可见。 如果您需要它,可以做

  • 我刚开始使用android studio,ive用一个我试图构建的应用程序进入了这个领域。 这是我到目前为止的编码:

  • 完成表单并点击注册按钮后,我得到一个弹出的信息消息(模态),消息中有close(X)和OK按钮和标题:在ABC Project下,显示了以下内容&通知用户注册成功的文本。 我尝试了几种方法来点击这个弹出窗口中的OK按钮,但都没有成功: 附加提示: null 我很感激你给我的提示和支持谢谢