C++中怎么用API创建窗口???急急急急急急!!!

不要MFC,详细。。。... 不要MFC,详细。。。 展开
 我来答
a6_gesture
2011-07-27 · TA获得超过108个赞
知道小有建树答主
回答量:114
采纳率:0%
帮助的人:90.5万
展开全部

新建一个32空程序,在里面新建一个.cpp文件。然后把下面的代码考进去,运行就会起来一个窗口。你仔细看看这个吧,我自己写了,有注释。

/////////////////////////////////////////////////////////win.cpp///////////////////////////////////////////////////////////////////

#include <windows.h>

#include "stdio.h"

LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam);

//消息处理函数原形

bool g_btxt = false;

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)

{

char *szClassName = "WndClass";

WNDCLASSEX wndclass; //用描述主窗口的参数填充WNDCLASSEX 结构

wndclass.cbSize = sizeof(wndclass); //定义结构的大小

wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; //定义窗口样式

wndclass.lpfnWndProc = WndProc; //指定本窗口的消息处理函数

wndclass.cbClsExtra = 0; //没有额外的类内存

wndclass.cbWndExtra = 0; //没有额外的窗口内存

wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION); //使用默认的图标

wndclass.hCursor = LoadCursor(NULL,IDC_ARROW); //使用默认的光标

wndclass.hbrBackground = (HBRUSH)(COLOR_3DFACE + 1); //定义窗口的背景颜色为灰色

wndclass.hInstance = hInstance; //实例句柄

wndclass.lpszClassName = szClassName; //窗口类名称

wndclass.lpszMenuName = NULL; //不使用菜单

wndclass.hIconSm = NULL; //没有类的小图标

//注册窗口类

::RegisterClassEx(&wndclass);

//创建主窗口

HWND hwnd = ::CreateWindowEx(0,  //不定义扩展样式

szClassName,  //类名

"Hello world",  //窗口标题

WS_OVERLAPPEDWINDOW,  //窗口风格

CW_USEDEFAULT,  //默认的窗口X 轴坐标

CW_USEDEFAULT,  //默认的窗口Y 轴坐标

CW_USEDEFAULT,  //默认的窗口宽度

CW_USEDEFAULT,  //默认的窗口高度

NULL,  //没有父窗口句柄

NULL,  //没有菜单句柄

hInstance,  //程序实例句柄

NULL);  //没有用户数据

if(hwnd == NULL)

{

::MessageBox(NULL,"创建窗口出错","error",MB_ICONHAND);

return -1;

}

 

::ShowWindow(hwnd,nCmdShow);  //显示窗口  

::UpdateWindow(hwnd);  //刷新窗口客户区

MSG msg;

while(::GetMessage(&msg,NULL,0,0))   //从消息队列中取出消息,交给消息处理函数处理,直到GetMessage 函数返回FALSE ,结束消息循环

{

 

::TranslateMessage(&msg);  //转化键盘消息

 

::DispatchMessage(&msg);  //将消息发送给消息处理函数

}

return msg.wParam;

}

LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)

{

char *szText = "My first window process ";

HDC hdc; //声明设备环境句柄

PAINTSTRUCT ps;

switch(msg)

{

case WM_PAINT: //窗口客户区需要重画

{

if (g_btxt == false)

{

hdc = ::BeginPaint(hwnd,&ps); //使无效的客户区变得有效,并取得设备环境句柄

::TextOut(hdc,0,0,szText,strlen(szText));

::EndPaint(hwnd,&ps);

g_btxt = true;

}

return 0;

}

case WM_DESTROY: //正在销毁窗口

{

::PostQuitMessage(0); //向消息队列投递一个WM_QUIT 消息,促使GetMessage 函数返回0,结束消息循环

return 0;

}

case WM_KEYDOWN:

switch (wParam)

{

case VK_ESCAPE:

PostMessage(hwnd, WM_QUIT, 0, 0);

break;

}

break;

case WM_LBUTTONDOWN:

UINT x, y;

LPSTR info = new char[50];

x = LOWORD(lParam);

y = HIWORD(lParam);

sprintf(info, "%d_%d", x, y);

MessageBox(hwnd, info, "mouse info", MB_OK);

delete info;

break;

}

return ::DefWindowProc(hwnd,msg,wParam,lParam); // 将我们不处理的消息交给系统做默认处理

}

///////////////////////////////////////////////////////////////////////////////

运行后效果:

nbv345nbv345
2011-07-27 · 超过19用户采纳过TA的回答
知道答主
回答量:82
采纳率:0%
帮助的人:50.6万
展开全部
//窗口类注册
if( !RegisterClass( &wndclass))
{
MessageBeep(0) ;
return FALSE ;
}

HWND CreateWindow //创建窗口类
(
  LPCTSTR lpszClassName,//窗口实例的类的名字
  LPCTSTR lpszTitle,    //窗口标题名
  DWORD dwStyle,    //新创建的窗口的样式(后面将会详细介绍)
  int x,          //窗口左上角的横坐标
  int y,          //窗口左上角的纵坐标
  int nWidth,        //窗口的宽度
  int nHeight,       //窗口的高度
  HWND hwndParent,   //该窗口的父窗口的句柄
  HMENU hMenu,     //窗口主菜单句柄
  HINSTANCE hInstance, //创建窗口的应用程序当前句柄
  LPVOID lpParam     //指向一个传递给窗口的参数值的指针
)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kuangjin520
2011-07-27 · TA获得超过703个赞
知道答主
回答量:138
采纳率:0%
帮助的人:143万
展开全部
int WINAPI WinMain(HINSTANCE hinstance,
HINSTANCE hprevinstance,
LPSTR lpcmdline,
int ncmdshow)
{
//定义一个窗口类,并填充必要的信息
WNDCLASS winclass;
HWND hwnd;
MSG msg;
HDC hdc;
PAINTSTRUCT ps;
winclass.style =CS_DBLCLKS|CS_OWNDC|
CS_HREDRAW|CS_VREDRAW;
winclass.lpfnWndProc=WindowProc;
winclass.cbClsExtra =0;
winclass.cbWndExtra =0;
winclass.hInstance =hinstance;
winclass.hIcon =LoadIcon(NULL,IDI_APPLICATION);
winclass.hCursor =LoadCursor(NULL,IDC_ARROW);
winclass.hbrBackground =(HBRUSH)GetStockObject(BLACK_BRUSH);
winclass.lpszClassName =WINDOW_CLASS_NAME;
winclass.lpszMenuName =NULL;
//注册刚才定义的窗口类
if(!RegisterClass(&winclass))
return 0;
//创建注册成功的窗口
if(!(hwnd=CreateWindow(WINDOW_CLASS_NAME,
"WIN3D Game Console",
WS_POPUP|WS_VISIBLE,
0,0,
GetSystemMetrics(SM_CXSCREEN),
GetSystemMetrics(SM_CYSCREEN),
NULL,
NULL,
hinstance,
NULL)))
return 0;
最后显示窗口。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式