Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ winapi:删除装饰_C++_Winapi_Setwindowlong_Getwindowlong - Fatal编程技术网

C++ winapi:删除装饰

C++ winapi:删除装饰,c++,winapi,setwindowlong,getwindowlong,C++,Winapi,Setwindowlong,Getwindowlong,这看起来像是复制品,但先听我说。这更多的是在调试方面。 我正在尝试使用该方法删除窗口的边框 哪些因素会使这些功能无法工作?使用ShowWindow(句柄,SW\u HIDE)隐藏窗口也不起作用。我已经用很多函数创建了自己的窗口类,所以我不想在这里粘贴我的全部代码 下面是我的窗口初始化函数: HRESULT SampleWindow::InitializeSimple(SampleWindow* win) { HRESULT hr; HWND

这看起来像是复制品,但先听我说。这更多的是在调试方面。 我正在尝试使用该方法删除窗口的边框

哪些因素会使这些功能无法工作?使用
ShowWindow(句柄,SW\u HIDE)
隐藏窗口也不起作用。我已经用很多函数创建了自己的窗口类,所以我不想在这里粘贴我的全部代码

下面是我的窗口初始化函数:

HRESULT SampleWindow::InitializeSimple(SampleWindow* win)
{
    HRESULT         hr;
    HWND            hWnd;
    SampleWindow*   sampleWin;

    sampleWin = new SampleWindow();

    aMWindowProps->Center();
    hWnd = CreateWindowEx(
        NULL,
        aMWindowProps->aWindowClass,
        aMWindowProps->aWindowTitle,
        WS_OVERLAPPEDWINDOW,
        aMWindowProps->aRealLeft,
        aMWindowProps->aRealTop,
        aMWindowProps->GetRelativePosWidth(),
        aMWindowProps->GetRelativePosHeight(),
        HWND_DESKTOP,
        NULL,
        *aMWindowProps->aHInstance,
        sampleWin);

    aMWindowProps->aHwnd = &hWnd;

    hr = hWnd ? S_OK : E_FAIL;

    win->aHwnd = &hWnd;
    //ShowWindow(hWnd, SW_SHOWNORMAL);

    return hr;
}
WindowProps
如您所见,包含有关正在创建的窗口的各种信息。 我的类中还有一个指向窗口处理程序的
HWND
指针变量

以下是我在main上尝试过的一些方法,其中sw2是指向窗口类的指针:

    ShowWindow(*sw2->aHwnd, SW_SHOW);
    //ShowWindow(*sw2->aHwnd, nCmdShow);
    LONG lStyle = GetWindowLong(*sw2->aHwnd, GWL_STYLE);
    lStyle &= WS_POPUP;
    //lStyle &= ~(WS_CAPTION | WS_THICKFRAME | WS_MINIMIZE | WS_MAXIMIZE | WS_SYSMENU);
    SetWindowLong(*sw2->aHwnd, GWL_STYLE, lStyle);
    //ShowWindow(*sw2->aHwnd, SW_MINIMIZE);
    //ShowWindow(*sw2->aHwnd, SW_HIDE);
    //ShowWindow(*sw2->aHwnd, SW_HIDE);
    //SetWindowLong(*sw2->aHwnd, GWL_STYLE, GetWindowLong(*sw2->aHwnd, GWL_STYLE) && ~ WS_BORDER && ~ WS_SIZEBOX && ~ WS_DLGFRAME);
    SetWindowPos(*sw2->aHwnd, HWND_TOP, sw2->aMWindowProps->aRealLeft, sw2->aMWindowProps->aRealTop, sw2->aMWindowProps->aRealWidth, sw2->aMWindowProps->aRealHeight, SWP_FRAMECHANGED);
    //LONG lExStyle = GetWindowLong(*sw2->aHwnd, GWL_EXSTYLE);
    //lExStyle &= ~(WS_EX_DLGMODALFRAME | WS_EX_CLIENTEDGE | WS_EX_STATICEDGE);
    //SetWindowLong(*sw2->aHwnd, GWL_EXSTYLE, lExStyle);
    //SetWindowPos(*sw2->aHwnd, NULL, 0, 0, 0, 0, SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_NOOWNERZORDER);

我只是想要一些关于在哪里调试代码的建议。我知道这些函数可以工作,因为我已经在一个简单得多的窗口项目(微软的示例项目)上进行了测试。

正如乔纳森·波特在评论中指出的那样,您的错误是:

aMWindowProps->aHwnd = &hWnd;

hr = hWnd ? S_OK : E_FAIL;

win->aHwnd = &hWnd;
其中HWND HWND仅在当前方法的范围内有效。我猜你在课堂上将aHwnd定义为:

HWND*aHwnd

这至少是不必要的。您似乎将句柄(HWND不是别的)误认为是一种实例/对象本身。它不是,它更像一个指针或引用。您可以随时安全地编写:

HWND myAttribute=hWnd;
只要你在同一个过程中使用它。(窗口句柄甚至可以跨越进程边界,但不要告诉任何人)

事实上,我不知道在什么情况下,指针指向的是句柄而不是句柄本身


注意,我明确提到了句柄,因为HWND是一种标准窗口句柄。

您确定要将父窗口设置为
HWND\u DESKTOP
?我会尽量不用这个。谢谢你的建议。将该行更改为NULL,但不起作用。您的
InitializeSample()
函数存在根本性缺陷,您正在返回指向堆栈上变量(
hWnd
)的指针,该指针在函数返回后可能不再有效。谢谢。我在胡乱摆弄指针以掌握它。这个错误是向前迈出的一步。您建议如何处理此问题?正如你所看到的,我也有一个指向原稿的指针。我应该把它当作把手吗?@user2280704是的。铰链也是把手的一种。