问题标签 [createwindow]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2639 浏览

windows - 如何使用资源文件 (*.rc) 设置基于对话框的应用程序的样式

如何使用资源文件 (*.rc) 设置基于对话框的应用程序的样式?

我可以使用CreateWindowCreateWindowEx创建应用程序的主窗口。还有一些参数CreateWindowCreateWindowEx定义对话框的样式。但我想使用资源文件 (*.rc) 来设置它的样式,而不是通过将样式参数传递给函数的方式。

有人可以给我一些片段吗?

有人说我可以调用DialogBox,并给第二个参数样式模板。CreateWindow这会在和 *.rc 文件之间产生冲突吗?或者我可以同时使用它们吗?

0 投票
1 回答
3565 浏览

c++ - 在 CreateWindow 上设置 HWND 似乎失败

我来自 C# 并且对此非常陌生,所以请多多包涵。

我有一个MainWindow有一些私有HWND变量的类。一个用于窗口本身,一个用于每个控件。我想我需要跟踪它们,或者以后会让事情变得更容易?

无论如何,我有:

我有一个名为的私有方法initialise(HWND hWnd),它被调用WM_CREATE并将所有控件添加到窗口:

但是,这似乎并没有将按钮放在窗口上。事实上,当我调试时,我可以看到它甚至没有超过第一行。奇怪的是,当我将其更改为:

它似乎工作正常。

逻辑似乎表明将函数返回HWND的值分配给私有变量CreateWindow会导致问题,但是我之前已经这样做过并且没有问题?

我之前的代码和这段代码之间的唯一区别是我现在使用的是类,而之前(在我学习的时候)我只是把所有的东西都放在了WinMainand中WndProc

WinMain:http://pastebin.com/j54vW9gc
头文件: http: //pastebin.com/cUs4vVJ6
CPP 文件: http: //pastebin.com/B5KUXTvx

0 投票
1 回答
7692 浏览

c++ - Win32 C++ SetLayeredWindowAttributes 要么完全不透明,要么完全透明;中间什么都没有

所以我在我的程序中创建了第二个窗口,例如:

现在我的问题是如果我申请

其中 255 可以是 1-255 之间的任何值

窗户完全不透明,我看不到它后面的任何东西

这是完全透明的:

我怎样才能得到

工作——也就是说,我可以部分看到顶部的窗户;并部分看到它后面的窗户。我在这里查看了 MSDN 上的 doco,但我显然遗漏了一些东西参考 Microsoft Library

0 投票
2 回答
637 浏览

createwindow - CreateWindow坐标限制为32767?

如何创建坐标大于 32767 的子窗口?例如:

此代码创建坐标为 10;32767 的按钮。使用 MoveWindow 或 SetWindowPos 函数给出相同的结果。

我需要创建带有滚动和子控件的窗口(简单形式)。

0 投票
3 回答
13692 浏览

c++ - 在另一个线程中创建窗口(不是主线程)

我有一个功能:

这是我程序的主要部分:

当我在程序的主要部分调用函数 createMainWindow() 时,它可以正常工作,但是当我在线程(ClientThread)中运行它时,它不起作用。我读过我应该只在主线程中创建窗口。这是真的吗?如果这是真的,从另一个thead调用这个函数以在主线程中完成的最简单方法是什么?


谢谢大家。现在我知道问题所在,但我坚持解决方案。我的客户端线程代码是:

函数 receiveMsgByUdp() 停止该线程,直到收到消息。我为缺乏知识而道歉,但我可以使用什么功能或其他东西来解决这个问题。我应该将我的方法 receiveMsgByUdp() 重写为异步的,还是我如何调用函数 createMainWindow() 以在主线程上运行?关于最后一个变体:我如何在纯 winapi 中做到这一点,我找不到任何简单的例子。有人可以提供代码片段。再感谢一次)

0 投票
1 回答
270 浏览

windows - 如何在 Windows 上创建小窗口(32x32)?

这是创建窗口的方式。但是当我 GetClientRect 时,rcClient 比 32x32 大得多。

0 投票
3 回答
9932 浏览

c++ - 在 createwindow(...) 之后,如何给窗口一个颜色?

我创建了一个句柄为 handle_parent 的窗口。然后我创建了一个子窗口,如下所示:

我想设置子窗口“孩子”的颜色。如果我什么都不做,默认情况下颜色是灰色的。我怎么能设置它的颜色?我想保持颜色为黑色永久,无论如何都要改变。

0 投票
1 回答
1496 浏览

c++ - 在 WM_CREATE 中创建子窗口,同一线程的相关性?

一个典型的模式是在 message 的消息回调 ( WndProc) 中创建一个子窗口WM_CREATE

我完全理解这是一个很好的机会,但以后再做会有问题吗?这样做的一个原因是子窗口是在同一个线程中创建的。但是还有其他原因吗?

在同一个线程(作为父线程)中创建子窗口有多重要?至于“父GUI对话框线程的子线程可以创建子窗口吗? ”这似乎不是一般问题?

0 投票
3 回答
10267 浏览

c++ - 获取准确的窗口区域大小 - CreateWindow 窗口大小不是正确的窗口大小

在尝试在 C++ 中创建一个窗口并绘制窗口大小与我设置的大小不匹配的矩形时,我注意到一些非常烦人的事情。

例如,如果我设置 480x240 窗口并尝试通过获取 GetWindowRect(hwnd, &rect) 从上到下、从左到右绘制矩形并计算宽度和高度:

如果 amountRectangleX = 2 和 Y = 2 它会绘制 4 个矩形,但宽度和高度是“关闭的”,因此它不会填满整个屏幕或渲染它。发生这种情况的唯一方法(我已经用很多其他语言做过,所以我知道它有效)是,如果我设置 Window Size = 480x240,我希望它成为“DRAW”的区域。因为如果边框包含在窗口的大小中 - 在另一台具有不同窗口样式等的计算机上会有所不同。而且我不能只是为我的计算机手动“更改”它。

如果我设置窗口大小 = 480x240 并截屏,我会看到窗口空间 = 452x232,这令人困惑。如果我设置窗口大小 = 480x240 就可以了,但是当我 GetWindowRect() 我得到 452x232 而不是 480x240 时这是无效的,因为我没有足够的空间来绘制。这可以解释为什么我的 Rectangles 渲染超出了窗口空间,而我不希望这样。但我仍然希望能够设置我的尺寸 = 480x240 或其他任何东西,但仍然有边框。

为什么它会以这种方式工作,是否有解决此问题的方法?我不能是唯一一个想要能够设置窗口分辨率的人,无论您使用什么计算机,您设置的尺寸都是您可以绘制的绘图区域。

0 投票
0 回答
679 浏览

windows - 通过 rundll32 在 dll 中运行完整的 Windows 应用程序

有没有人有一个将完整的 WIN32 Windows 应用程序构建为 dll 的示例?

我想导出一个函数,通过 rundll32 调用它,并拥有一个完整的 Windows 应用程序,其中包含装饰、菜单、加速器和弹出的所有内容。

我知道rundll32的调用约定:

我可以通过以下命令从该函数中提取一个 MessageBox:rundll32.exe test3.dll,TestEntry other params and args

我可以通过获取 DLL 的句柄并在我的调用中GetModuleHandle("test3.dll")使用它来从我的 DLL 加载资源。这似乎也适用,但我还没有工作(婴儿步骤..)。hInstLoadStringLoadIconLoadAccelerators

我可以通过使用这些字符串和图标来注册一个 Windows 类RegisterClassEx,但我必须使用父类hInst,否则我ERROR_CANNOT_FIND_WND_CLASS在调用CreateWindow. 我认为这是预期的。

但是,当我尝试在 中使用该类时CreateWindow,它返回 NULL,而GetLastError.

我可以检索使用从 rundll32 传递的 hInst 的窗口类GetWindowsLong(hWnd, GWL_ATOM)。将它用于 lpClassName,我可以拉出一个没有菜单和加速器的装饰窗口,但它有点时髦,因为 rundll 的窗口类通常只用于它的消息队列。我尝试使用子类化窗口SetWindowsLong来替换WndProc和调用CallWindowProc而不是DefWindowProc在我的 dll 中WndProc

由于无法在 MSVC++ 2010 Express 中调试它,我受到了阻碍。我用适当的条目替换了项目的命令和命令参数,因此它可以正确启动它,但它抱怨没有 rundll32.exe 的调试信息,并且断点等不起作用。

有任何想法吗?我在正确的轨道上吗?