一个简单的win32窗口程序
#include<WINDOWS.H>LRESULTCALLBACKMAINWNDPROC(HWNDhwnd,UINTmsg,WPARAMwparam,LPARAMlpa...
#include <WINDOWS.H>
LRESULT CALLBACK MAINWNDPROC
(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam)
{
static char str[2]={0};
switch(msg)
{
case WM_KEYDOWN:
str[0]=char(wparam);
if(msg==MK_SHIFT&&wparam)
InvalidateRect(hwnd,NULL,1);
return 0;
case WM_PAINT:
PAINTSTRUCT ps;
BeginPaint(hwnd,&ps);
TextOut(ps.hdc,0,0,str,strlen(str));
EndPaint(hwnd,&ps);
return 0;
case WM_CLOSE:
PostMessage(hwnd,WM_QUIT,0,0);
return 0;
}
return DefWindowProc(hwnd,msg,wparam,lparam);
}
int WINAPI WinMain(HINSTANCE hinstance,HINSTANCE Phinstance,LPSTR lpstr, int showcmd)
{
WNDCLASS MYWND;
MYWND.cbClsExtra=0;
MYWND.cbWndExtra=0;
MYWND.hbrBackground=(HBRUSH)GetStockObject( WHITE_BRUSH);
MYWND.hInstance=hinstance;
MYWND.lpszClassName="应用程序";
MYWND.lpszMenuName=NULL;
MYWND.style=CS_BYTEALIGNCLIENT;
MYWND.hIcon=LoadIcon(NULL,IDI_APPLICATION);
MYWND.hCursor=LoadCursor(NULL,IDC_ARROW);
MYWND.lpfnWndProc=MAINWNDPROC;
RegisterClass(&MYWND);
HWND hwnd=CreateWindow(
MYWND.lpszClassName,
"APPLICATION",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hinstance,
NULL
);
ShowWindow(hwnd,showcmd);
UpdateWindow(hwnd);
MSG msg;
while(GetMessage(&msg,NULL,0,0)!=0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
getmessage从消息队列中取出一个消息
TranslateMessage将消息翻译
DispatchMessage 将消息发送到窗口过程函数
在窗口过程中处理完消息后返回while循环 再次取出下一个消息
如果要实现组合键应该怎么写 ctrl+z 展开
LRESULT CALLBACK MAINWNDPROC
(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam)
{
static char str[2]={0};
switch(msg)
{
case WM_KEYDOWN:
str[0]=char(wparam);
if(msg==MK_SHIFT&&wparam)
InvalidateRect(hwnd,NULL,1);
return 0;
case WM_PAINT:
PAINTSTRUCT ps;
BeginPaint(hwnd,&ps);
TextOut(ps.hdc,0,0,str,strlen(str));
EndPaint(hwnd,&ps);
return 0;
case WM_CLOSE:
PostMessage(hwnd,WM_QUIT,0,0);
return 0;
}
return DefWindowProc(hwnd,msg,wparam,lparam);
}
int WINAPI WinMain(HINSTANCE hinstance,HINSTANCE Phinstance,LPSTR lpstr, int showcmd)
{
WNDCLASS MYWND;
MYWND.cbClsExtra=0;
MYWND.cbWndExtra=0;
MYWND.hbrBackground=(HBRUSH)GetStockObject( WHITE_BRUSH);
MYWND.hInstance=hinstance;
MYWND.lpszClassName="应用程序";
MYWND.lpszMenuName=NULL;
MYWND.style=CS_BYTEALIGNCLIENT;
MYWND.hIcon=LoadIcon(NULL,IDI_APPLICATION);
MYWND.hCursor=LoadCursor(NULL,IDC_ARROW);
MYWND.lpfnWndProc=MAINWNDPROC;
RegisterClass(&MYWND);
HWND hwnd=CreateWindow(
MYWND.lpszClassName,
"APPLICATION",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hinstance,
NULL
);
ShowWindow(hwnd,showcmd);
UpdateWindow(hwnd);
MSG msg;
while(GetMessage(&msg,NULL,0,0)!=0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
getmessage从消息队列中取出一个消息
TranslateMessage将消息翻译
DispatchMessage 将消息发送到窗口过程函数
在窗口过程中处理完消息后返回while循环 再次取出下一个消息
如果要实现组合键应该怎么写 ctrl+z 展开
展开全部
HACCEL hAccelTable;
hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WIN32));
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
还要建立加速键表资源和相应项,指向菜单,或自定义的ID,
在wm_command或wm_syscommand中处理,和菜单类似
你可以建立默认的win32工程试试,或者是helloworld的win32工程,vs的几个版本应该差的不太多,里面应该含有例子
展开全部
给你一个可以运行的范例程序吧,这个文章下面有下载cpp文件的链接,带注释,直接在VC中就可以运行。http://www.yangfei.org/post/50.html
#include<windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);//窗口函数说明
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASS wndclass;//定义窗口类结构变量
HWND hwnd;//定义窗口句柄
MSG msg;//定义消息结构变量
/*定义窗口类的各属性*/
wndclass.style=CS_HREDRAW|CS_VREDRAW;//改变窗口大小则重画
wndclass.lpfnWndProc=WndProc;//窗口函数为WndProc
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=TEXT("window窗口创建");//窗口类名为windows窗口创建
/*注册窗口类*/
if(! RegisterClass(&wndclass))return FALSE;
/*创建窗口*/
hwnd=CreateWindow(TEXT("window窗口创建"), //窗口类名window窗口创建
TEXT("window窗口创建"),//窗口名window窗口创建
WS_OVERLAPPEDWINDOW,//重叠式窗口
CW_USEDEFAULT,CW_USEDEFAULT,//左上角屏幕坐标默认值
CW_USEDEFAULT,CW_USEDEFAULT,//窗口宽度和高度默认值
NULL,//此窗口无父窗口
NULL,//此窗口无主菜单
hInstance,//创建此窗口的实例句柄
NULL);//此窗口无创建参数
/*显示并更新窗口*/
ShowWindow(hwnd,nCmdShow);//显示窗口
UpdateWindow(hwnd);//更新窗口的客户区
/*消息循环*/
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);//键盘消息转换
DispatchMessage(&msg);//派送消息给窗口函数
}
return msg.wParam;//返回推出值
}
/*窗口函数*/
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
//根据消息值转相应的消息处理
switch(message)
{
case WM_PAINT://重画窗口客户区消息处理
HDC hdc;//定义设备描述表句柄
PAINTSTRUCT ps;//定义绘图星系结构变量
hdc=BeginPaint(hwnd,&ps);//获取要重画的窗口的设备描述表句柄
TextOut(hdc,10,20,TEXT("哈哈,windows编程窗口!!"),16);//输出文本
EndPaint(hwnd,&ps);//结束要重画的窗口
return 0;
case WM_DESTROY://撤销窗口消息处理
PostQuitMessage(0);//产生推出程序消息WM_QUIT
return 0;
}
return DefWindowProc(hwnd,message, wParam,lParam);
//其他转默认窗口函数
}
#include<windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);//窗口函数说明
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASS wndclass;//定义窗口类结构变量
HWND hwnd;//定义窗口句柄
MSG msg;//定义消息结构变量
/*定义窗口类的各属性*/
wndclass.style=CS_HREDRAW|CS_VREDRAW;//改变窗口大小则重画
wndclass.lpfnWndProc=WndProc;//窗口函数为WndProc
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=TEXT("window窗口创建");//窗口类名为windows窗口创建
/*注册窗口类*/
if(! RegisterClass(&wndclass))return FALSE;
/*创建窗口*/
hwnd=CreateWindow(TEXT("window窗口创建"), //窗口类名window窗口创建
TEXT("window窗口创建"),//窗口名window窗口创建
WS_OVERLAPPEDWINDOW,//重叠式窗口
CW_USEDEFAULT,CW_USEDEFAULT,//左上角屏幕坐标默认值
CW_USEDEFAULT,CW_USEDEFAULT,//窗口宽度和高度默认值
NULL,//此窗口无父窗口
NULL,//此窗口无主菜单
hInstance,//创建此窗口的实例句柄
NULL);//此窗口无创建参数
/*显示并更新窗口*/
ShowWindow(hwnd,nCmdShow);//显示窗口
UpdateWindow(hwnd);//更新窗口的客户区
/*消息循环*/
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);//键盘消息转换
DispatchMessage(&msg);//派送消息给窗口函数
}
return msg.wParam;//返回推出值
}
/*窗口函数*/
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
//根据消息值转相应的消息处理
switch(message)
{
case WM_PAINT://重画窗口客户区消息处理
HDC hdc;//定义设备描述表句柄
PAINTSTRUCT ps;//定义绘图星系结构变量
hdc=BeginPaint(hwnd,&ps);//获取要重画的窗口的设备描述表句柄
TextOut(hdc,10,20,TEXT("哈哈,windows编程窗口!!"),16);//输出文本
EndPaint(hwnd,&ps);//结束要重画的窗口
return 0;
case WM_DESTROY://撤销窗口消息处理
PostQuitMessage(0);//产生推出程序消息WM_QUIT
return 0;
}
return DefWindowProc(hwnd,message, wParam,lParam);
//其他转默认窗口函数
}
参考资料: http://www.yangfei.org
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询