用createwindow 为什么没窗口出来???
#include<windows.h>intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,&...
#include<windows.h>int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow){ HWND hwnd ;hwnd=CreateWindow( "MySub ", "Test ",WS_BORDER, 50, 50, 140, 100, NULL, (HMENU)121, NULL, NULL); return 0 ;}编译通过运行起没窗口是咋回事
展开
4个回答
展开全部
首先,你的窗口类注册了吗?也就是RegisterClass。。。
没注册窗口类CreateWindow就会调用失败。
其次,你创建的窗口没有WS_VISIBLE 属性,这样的窗口需要调用ShowWindow来显示。
给你一个完整的小实例吧
#include <windows.h>
LRESULT CALLBACK WinProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR szCmdLine,int iCmdShow)
{
TCHAR szname[]=TEXT("classname");
HWND hwnd;
MSG msg;
ZeroMemory(&msg,sizeof(msg));
WNDCLASS wndclass;
wndclass.style=CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc=WinProc;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hInstance=hInstance;
wndclass.lpszClassName=szname;
wndclass.lpszMenuName=NULL;
RegisterClass(&wndclass);
hwnd=CreateWindow(szname,TEXT("windowsnametest"),WS_OVERLAPPEDWINDOW ,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
if(hwnd)
ShowWindow(hwnd,SW_SHOW);
else
{
MessageBox(NULL,TEXT("创建窗口失败!"),TEXT("提示"),MB_OK);
UnregisterClass(szname,hInstance);
return 1;
}
UpdateWindow(hwnd);
while(GetMessage(&msg,hwnd,0,0)>0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
UnregisterClass(szname,hInstance);
return msg.wParam;
}
LRESULT CALLBACK WinProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_CLOSE:
DestroyWindow(hwnd);
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return 0;
}
没注册窗口类CreateWindow就会调用失败。
其次,你创建的窗口没有WS_VISIBLE 属性,这样的窗口需要调用ShowWindow来显示。
给你一个完整的小实例吧
#include <windows.h>
LRESULT CALLBACK WinProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR szCmdLine,int iCmdShow)
{
TCHAR szname[]=TEXT("classname");
HWND hwnd;
MSG msg;
ZeroMemory(&msg,sizeof(msg));
WNDCLASS wndclass;
wndclass.style=CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc=WinProc;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hInstance=hInstance;
wndclass.lpszClassName=szname;
wndclass.lpszMenuName=NULL;
RegisterClass(&wndclass);
hwnd=CreateWindow(szname,TEXT("windowsnametest"),WS_OVERLAPPEDWINDOW ,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
if(hwnd)
ShowWindow(hwnd,SW_SHOW);
else
{
MessageBox(NULL,TEXT("创建窗口失败!"),TEXT("提示"),MB_OK);
UnregisterClass(szname,hInstance);
return 1;
}
UpdateWindow(hwnd);
while(GetMessage(&msg,hwnd,0,0)>0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
UnregisterClass(szname,hInstance);
return msg.wParam;
}
LRESULT CALLBACK WinProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_CLOSE:
DestroyWindow(hwnd);
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return 0;
}
展开全部
如果窗口创建成功的话.
那么还需要调用ShowWindow这个API,
窗口刚创建的时候默认是隐藏的
ShowWindow(hwnd, SW_SHOW); // 显示窗口
ShowWindow(hwnd,SW_HIDE); // 隐藏窗口
此外, 还需要 UpdateWindow来刷新.
具体百度这个2函数, 百科有很详细的解释
那么还需要调用ShowWindow这个API,
窗口刚创建的时候默认是隐藏的
ShowWindow(hwnd, SW_SHOW); // 显示窗口
ShowWindow(hwnd,SW_HIDE); // 隐藏窗口
此外, 还需要 UpdateWindow来刷新.
具体百度这个2函数, 百科有很详细的解释
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为你只是创建了窗口,你并没有显示以及更新窗口,你必须在创建之后继续显示更新窗口。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
WS_BORDER | WS_VISIBLE
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询