gpt4 book ai didi

c# - 如何在 COmpact Framework 中将 ControlBox 设置为 false 时保留 ControlBox UI 感觉(win mobile)

转载 作者:太空宇宙 更新时间:2023-11-03 11:30:28 26 4
gpt4 key购买 nike

我的表单需要删除一些表单上的“x”(“智能最小化”- 实际上不是那么智能)和“确定”按钮。不幸的是,当我这样做时,小键盘输入图标从中间移动到右侧,并且下方的栏变成灰色而不是黑色。

我希望能够删除最小化和 OK 控件(或者只是覆盖它们的处理程序)——但不幸的是我无法在 CF 中执行此操作。 (真是个错误,女士!)

有没有办法恢复一些 UI 的外观和感觉(比如黑条)?

就像我说的,理想情况下我们希望将文本“OK”更改为其他词,或者只是重载用户启动的最小化(单击 X 或 ok)。

(我会尝试放一些屏幕截图来展示我在说什么)

编辑

另请注意,我在表单初始化的主菜单中添加了两个项目。

    // create three menu items to go at bottom of form/on main menu
// add new menu items to main menu
// get rid of 'X' (smart minimize) and OK controls

menuNext = new System.Windows.Forms.MenuItem();
...

mainMenu.MenuItems.Add(menuPrevious);
mainMenu.MenuItems.Add(menuNext);
mainMenu.MenuItems.Add(menuCancel);

MinimizeBox = false;
ControlBox = false;

注意我以编程方式生成表单和项目 - 而不是使用表单设计器。这是一项要求,因为这些表单是在运行时根据配置文件动态生成的。

最佳答案

Tim,我发现这里有一些 P/Invoke 调用有助于显示和隐藏 HHTaskBarMS_SIPBUTTON:

[DllImport("coredll.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, uint uFlags);

[DllImport("coredll.dll", EntryPoint = "FindWindowW", SetLastError = true)]
public static extern IntPtr FindWindowCE(string lpClassName, string lpWindowName);

public enum WindowPosition {
SWP_HIDEWINDOW = 0x0080,
SWP_SHOWWINDOW = 0x0040
}

这是我为它写的包装器:

static IntPtr _taskBar;
static IntPtr _sipButton;
static void ShowWindowsMenu(bool enable) {
try {
if (enable) {
if (_taskBar != IntPtr.Zero) {
SetWindowPos(_taskBar, IntPtr.Zero, 0, 0, 240, 26, (int)WindowPosition.SWP_SHOWWINDOW); // display the start bar
}
} else {
_taskBar = FindWindowCE("HHTaskBar", null); // Find the handle to the Start Bar
if (_taskBar != IntPtr.Zero) { // If the handle is found then hide the start bar
SetWindowPos(_taskBar, IntPtr.Zero, 0, 0, 0, 0, (int)WindowPosition.SWP_HIDEWINDOW); // Hide the start bar
}
}
} catch (Exception err) {
// log my Error (enable ? "Show Start" : "Hide Start", err);
}
try {
if (enable) {
if (_sipButton != IntPtr.Zero) { // If the handle is found then hide the start bar
SetWindowPos(_sipButton, IntPtr.Zero, 0, 0, 240, 26, (int)WindowPosition.SWP_SHOWWINDOW); // display the start bar
}
} else {
_sipButton = FindWindowCE("MS_SIPBUTTON", "MS_SIPBUTTON");
if (_sipButton != IntPtr.Zero) { // If the handle is found then hide the start bar
SetWindowPos(_sipButton, IntPtr.Zero, 0, 0, 0, 0, (int)WindowPosition.SWP_HIDEWINDOW); // Hide the start bar
}
}
} catch (Exception err) {
// log my Error Wrapper(enable ? "Show SIP" : "Hide SIP", err);
}
}

最后,我是这样使用它的:

/// <summary>
/// The main entry point for the application.
/// </summary>
[MTAThread]
static void Main() {
ShowWindowsMenu(false);
try {
Application.Run(new Form());
} catch (Exception err) {
// Log my error
} finally {
ShowWindowsMenu(true);
}
}

关于c# - 如何在 COmpact Framework 中将 ControlBox 设置为 false 时保留 ControlBox UI 感觉(win mobile),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7955417/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com