【发布时间】:2016-06-29 21:58:10
【问题描述】:
大家好,我有这个问题,我一直试图解决很长时间。我正在使用 code::blocks 用 C 创建一个 win 32 gui 应用程序;
我想用按钮创建一个菜单,所以当你点击一个按钮时; 将出现一个按钮列表;如果您单击其他按钮,列表将发生变化,依此类推。
我设法创建了按钮列表,但是当我需要销毁它们时,DestroyWindow 函数什么也不做,按钮仍然存在(我也尝试过向按钮发送 WM_CLOSE 和 WM_DESTROY 消息)。 我会给出一个示例代码,请告诉我我做错了什么,这让我发疯了。
PS:我使用的是 c 而不是 c++,因为我不得不这样做。
提前谢谢大家
#include <windows.h>
#include <wchar.h>
#include <stdbool.h>
#define B 115
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg,WPARAM wParam, LPARAM lParam)
{
HWND button1,button2;
switch(msg)
{case WM_CREATE:
button1 = CreateWindowW(L"Button", L"Button to push", WS_VISIBLE | WS_CHILD|BS_FLAT|BS_PUSHBUTTON|WS_BORDER,
0,0, 100, 80, hwnd, (HMENU) B, GetModuleHandle(NULL), NULL);
button2 = CreateWindowW(L"Button", L"Button to kill", WS_VISIBLE | WS_CHILD|BS_FLAT|BS_PUSHBUTTON|WS_BORDER,
100,0, 100, 80, hwnd, 0, GetModuleHandle(NULL), NULL);
break;
case WM_COMMAND:
if(LOWORD(wParam)==B)
{
DestroyWindow(button2); //here i destroy the button 2 if button 1 was clicked
}
break;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProcW(hwnd, msg, wParam, lParam);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
MSG msg;
HWND W;
WNDCLASSW ClassP;
ClassP.style = CS_HREDRAW | CS_VREDRAW;
ClassP.cbClsExtra = 0;
ClassP.cbWndExtra = 0;
ClassP.lpszClassName = L"FenetrePrincipale";
ClassP.hInstance = hInstance;
ClassP.hbrBackground = GetSysColorBrush(COLOR_3DFACE);
ClassP.lpszMenuName = NULL;
ClassP.lpfnWndProc = WndProc;
ClassP.hCursor = LoadCursor(NULL, IDC_ARROW);
ClassP.hIcon = LoadIcon(NULL, IDI_ERROR);
RegisterClassW(&ClassP);
W = CreateWindowW(ClassP.lpszClassName, L"PROBLEM SAMPLE CODE",
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
100, 100, 300, 300, NULL, NULL, hInstance, NULL);
ShowWindow(W, nCmdShow);
UpdateWindow(W);
while (GetMessage(&msg, NULL, 0, 0)) {
DispatchMessage(&msg);
}
return (int) msg.wParam;
}
【问题讨论】:
-
按钮没有被破坏,还是窗口没有重绘?
-
我不知道,但我认为按钮没有被破坏,我怎么知道?
-
if(!IsWindow(button2) || !button2) OutputDebugStringW("Button2 被破坏了!");
-
是的,它被破坏了;那么如何在没有按钮的情况下重绘窗口呢?
-
不幸的是按钮仍然存在
标签: c user-interface winapi