- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试制作一个在窗口中绘制一些数据的 Visual C++ 2008 程序。我读过 various places执行此操作的正确方法是重写 WndProc。所以我在 Visual C++ 2008 Express Edition 中创建了一个 Windows 窗体应用程序,并将此代码添加到 Form1.h,但它无法编译:
public:
[System::Security::Permissions::PermissionSet(System::Security::Permissions::SecurityAction::Demand, Name="FullTrust")]
virtual void WndProc(Message %m) override
{
switch(m.Msg)
{
case WM_PAINT:
{
HDC hDC;
PAINTSTRUCT ps;
hDC = BeginPaint(m.HWnd, &ps);
// i'd like to insert GDI code here
EndPaint(m.Wnd, &ps);
return;
}
}
Form::WndProc(m);
}
当我尝试在 Visual C++ 2008 Express Edition 中编译它时,出现以下错误:错误 C2664:“BeginPaint”:无法将参数 1 从“System::IntPtr”转换为“HWND”
当我尝试使用 this->Handle 而不是 m.HWnd 时,出现了同样的错误。
当我尝试将 m.HWnd 转换为 (HWND) 时,出现此错误:错误 C2440:“类型转换”:无法从“System::IntPtr”转换为“HWND”
也许我需要将 m.HWnd 转换为 pin_ptr 或其他东西。
最佳答案
如果您正在制作原始 Win32 应用程序,那么您可以使用这些函数。
另一方面,如果您正在制作 WinForms 应用程序,那么您需要覆盖 OnPaint 事件。
您最终会得到一个 Paint 例程 shell,您可以从中使用图形对象的绘图函数。
private: System::Void Form1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e)
{
e->Graphics->DrawRectangle(...)
}
如果您真的想编写原始 Win32 代码,请告诉我,我可以帮助您编写一个 shell。目前,如果您对 Win32 感兴趣,我推荐 Charles Petzold 的 Programming Windows 第五版。
如果您想学习 C++ WinForms...那么,我建议您切换到 C# 或 VB.NET,因为它们可能更直观。
希望这对您有所帮助。干杯。
关于.net - BeginPaint 的 hWnd 参数值是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/641089/
如何将 hwnd 类型数据存储和检索到一个平面文件中,并将其返回到 hwnd 类型变量中? 我是这样写的: HWND g_hWndApp, g_hWndApp1; ofstream myfile; m
我需要一些具体的帮助。我知道类名、所有者 hwnd 和窗口的大小。我如何获得它的hwnd?或者,至少,获取满足这些条件的所有窗口的列表。 提前致谢! 瓦利 最佳答案 您可以尝试使用此代码。它将为您提供
我确实了解如何重载运算符,但显然不完全了解。 谁能解释一下这部分的用法 WWindow::operator HWND() { // This overloaded operator allow
我尝试使用 DirectXTK 在我的游戏引擎中实现鼠标和键盘支持。这对于键盘来说非常简单,但是我在实现适当的鼠标支持方面遇到了问题。我在关注 THIS用于在我的引擎中实现鼠标。这篇来自 Micros
我有 2 个应用程序,一个是隐藏窗口(“hW”),另一个是控制台应用程序(“CA”),来自我想向硬件发送命令。在控制台应用程序中,我得到了硬件句柄,这是一个问题:如果我正在运行: PostMessag
我一直在改进我一直致力于的类(class),其中之一就是创建库来处理某些在我的主项目中并不真正需要看到的任务。但是,当我调用该类并实例化我刚刚创建的库时,我得到: Intellisense: argu
我正在应用程序中处理 ESC 键,收到此键后我希望关闭当前窗口。 我应该简单地调用DestroyWindow(hWnd)还是应该SendMessage(WM_CLOSE, hWnd, 0, 0),或者
我是说 WndProc_OnCommand(HWND hWnd, int id, HWND hwndCtl, UINT codeNotify) 可以这样重写 WndProc_OnCommand(hWn
假设 GetDC(hWnd) 作为 WM_CREATE 上的第一条 指令被调用,对于窗口 hWnd, GetDC() 是否可能返回 NULL? 我担心 GetDC() 可能因资源不足而失败。当发生这种
我是这个社区的新手,在使用我的自动化脚本 1 时遇到问题,我想获取 HWND 的创建时间。 我在从 FindWindowEx 检索到的数组中有一组 HWND,我想在数组中找到最后根据系统时间创建的 H
我使用CreateCoreWebView2Host()方法创建了边缘浏览器窗口。此方法使用父窗口句柄并创建子窗口,我们可以在其中导航网页。导航完成后,我需要返回我的窗口句柄,但我认为我无法返回。 在S
当我们使用WindowFromPoint winapi函数时,我们通常可以得到这样的情况:Point指定窗口内的某个控件。在这种情况下,WindowFromPoint 返回该控件的句柄,而不是返回处理
我想知道您是否可以将句柄转换为窗口“HWND”。我需要使用“FindWindow”方法调用“PostMessage”函数。 我目前必须采购 HANDLE mainProcess; BOOL APIEN
为什么我在此处将桌面作为我的模态对话框的父 HWND? class CSaveProfileAsDlg: public CSimpleDialog { .... LRESULT OnInit
我正在将我的 HWND 传递给一个子流程,这样它就可以向我发送有关其进度的消息。有时我从未收到来自子流程的任何消息。在调查过程中,我发现我传递给子进程的 GetSafeHwnd() 似乎返回了我不期望
我又是伙计们,到目前为止,我已经设法学习了有关窗口创建和消息系统的大多数基础知识,现在我想问一下格式化,因为我没有设法在谷歌上找到任何关于我的特殊情况的信息。这是到目前为止的样子: 其中带有 0 的框
GetDesktopWindow() 仅返回主桌面。我也试过 EnumDisplayMonitors(),但没有返回桌面句柄。 最佳答案 您可以使用可用的函数来执行此操作,如下所示: 方法 1(对于重
我正在尝试创建一个简单的窗口,但我遇到了一些问题。编译器不会报错,但它根本无法创建窗口的 hWnd。它还表示正在使用“msg”变量而未初始化。这不是错误,只是警告,但是我感到不舒服。当我单击调试屏幕中
如何在另一个第三方应用程序中使用 C++ 获取 Combobox 的 HWND? MSDN 有一个函数叫做 GetDlgItem()但是第二个参数需要控件的 ID。有函数 GetDlgCtrlID()
当我编译我的代码时,应该打开一个窗口,但它没有。我已经创建了一个类、HWND 和应用程序处理程序;依然没有。 我有点新,很抱歉这个问题。 应用程序运行良好,没有错误,但窗口似乎没有出现。 #inclu
我是一名优秀的程序员,十分优秀!