,在一个窗口中,创建一个按钮,点击按钮,再打开一个窗口,可是第二个窗口不显示,而且第一个窗口连DESTROY消息也不响应了
求助,在一个窗口中,创建一个按钮,点击按钮,再打开一个窗口,可是第二个窗口不显示,而且第一个窗口连DESTROY消息也不响应了!
本来第一个窗口运行一切正常,也能正常退出,我就在消息处理函数里加了一个点击按钮时再建一个窗口,编译链接都正确,结果运行的时候点击按钮后第二个窗口不显示,然后点击关闭按钮窗口虽然关了,但是任务管理器里这个程序还有,没关闭,哪里错了?
谢谢了!!!!!
本来第一个窗口运行一切正常,也能正常退出,我就在消息处理函数里加了一个点击按钮时再建一个窗口,编译链接都正确,结果运行的时候点击按钮后第二个窗口不显示,然后点击关闭按钮窗口虽然关了,但是任务管理器里这个程序还有,没关闭,哪里错了?
谢谢了!!!!!
#pragma comment(linker,"/subsystem:windows /entry:WinMainCRTStartup")
#include<windows.h>
#define ID_B 111
HINSTANCE hInstance;
int nCmdShow;
LRESULT CALLBACK MainWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK SECWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
int _stdcall WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
char szClassName[] = "MainWClass";
WNDCLASSEX wndclass;
// 用描述主窗口的参数填充WNDCLASSEX结构
wndclass.cbSize = sizeof(wndclass); // 结构的大小
wndclass.style = CS_HREDRAW|CS_VREDRAW; // 指定如果大小改变就重画
wndclass.lpfnWndProc = MainWndProc; // 窗口函数指针
wndclass.cbClsExtra = 0; // 没有额外的类内存
wndclass.cbWndExtra = 0; // 没有额外的窗口内存
wndclass.hInstance = hInstance; // 实例句柄
wndclass.hIcon = ::LoadIcon(NULL,
IDI_APPLICATION); // 使用预定义图标
wndclass.hCursor = ::LoadCursor(NULL,
IDC_ARROW); // 使用预定义的光标
wndclass.hbrBackground = (HBRUSH)
::GetStockObject(WHITE_BRUSH); // 使用白色背景画刷
wndclass.lpszMenuName = NULL; // 不指定菜单
wndclass.lpszClassName = szClassName ; // 窗口类的名称
wndclass.hIconSm = NULL; // 没有类的小图标
// 注册这个窗口类
::RegisterClassEx(&wndclass);
// 创建主窗口
HWND hwnd = ::CreateWindowEx(
0, // dwExStyle,扩展样式
szClassName, // lpClassName,类名
"My first Window!", // lpWindowName,标题
WS_OVERLAPPEDWINDOW, // dwStyle,窗口风格
CW_USEDEFAULT, // X,初始 X 坐标
CW_USEDEFAULT, // Y,初始 Y 坐标
CW_USEDEFAULT, // nWidth,宽度
CW_USEDEFAULT, // nHeight,高度
NULL, // hWndParent,父窗口句柄
NULL, // hMenu,菜单句柄
hInstance, // hlnstance,程序实例句柄
NULL) ; // lpParam,用户数据
if(hwnd == NULL)
{
::MessageBox(NULL, "创建窗口出错!", "error", MB_OK);
return -1;
}
// 显示窗口,刷新窗口客户区
::ShowWindow(hwnd, nCmdShow);
::UpdateWindow(hwnd);
// 从消息堆中取出消息
MSG msg;
while(::GetMessage(&msg, NULL, 0, 0))
{
// 转化键盘消息
::TranslateMessage(&msg);
// 将消息发送到相应的窗口函数
::DispatchMessage(&msg);
}
// 当GetMessage返回0时程序结束
return msg.wParam;
}
LRESULT CALLBACK MainWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE:
{
::CreateWindowEx(0, "button", "按钮", WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
20, 20, 200, 30, hwnd, (HMENU)ID_B, NULL, NULL);
return 0;
}
case WM_COMMAND:
{
switch(LOWORD(wParam))
{
case ID_B:
{
char szClassName[] = "SECWClass";
WNDCLASSEX wndclass;
// 用描述主窗口的参数填充WNDCLASSEX结构
wndclass.cbSize = sizeof(wndclass); // 结构的大小