gpt4 book ai didi

.net - BeginPaint 的 hWnd 参数值是否正确?

转载 作者:太空狗 更新时间:2023-10-29 20:49:23 24 4
gpt4 key购买 nike

我正在尝试制作一个在窗口中绘制一些数据的 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 事件。

  • 切换到设计 View (显示表单的 View 。)
  • 点击表单的标题栏
  • 在属性窗口中(默认情况下可能在屏幕的右下角)选择顶部附近的闪电。这将显示事件列表。
  • 向下滚动到绘画事件并双击它。

您最终会得到一个 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/

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