关于基于窗口的程序设计

 (此文仅与爱好桌面应用的朋友交流经验,如果有所错误,欢迎指正。)  

     一直以来,我都是靠MFC写东西,真的很方便,自己不用动手写窗口,wizard自动生成了。

     结果了,不明白底层的运作,总是感觉缺点什么!

     最近终于知道了这是为什么了,MFC不是c++标准,而是微软提供的一个非标准的类库。很简单的问题,想了好久,笨死了~~

      既然如此,那么其他编译器不一定支持MFC,理所当然的,Linux,Unix当然不可能支持这个类库。这就是MFC的局限化。

       虽然现在不用MFC了,大家更喜欢在信息系统制作中使用j2ee或者.NET,可是了,MFC经典的程序设计模式,还是值得学习的。

       再有,我觉得,如果没有提供这个类库,我自己就写一个,然后封装,以后不就可以节约很多时间了吗?一点小体会。

      以下是自己写的一个简单的窗口程序,参照了网上的一个人写的代码。详细写出了注释,喜欢的人可以在自己的编译器下运行。(注:要支持WIN32 编程的编译器。本人用VC,运行于win32 application下)

 

#include<windows.h>//调用windows.h提供的win32 API 及一部分win32 宏

 

//消息处理函数(实际上是一种回调函数)

//参数:窗口句柄,消息,消息参数,消息参数

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

 

//win32应用主函数,消息入口

//参数:实例句柄,上一个实例句柄,命令行参数,窗口显示方式

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow)

{

 

HWND hwnd;//窗口句柄

MSG msg;//消息变量

WNDCLASS wndclass;//wndclass对象

char strClassName[]="window";//窗口类名。以str为前缀,符合初学者的习惯

char strTitleName[]="MyWindow";//窗口标题

 

//以下是wndclass对象成员变量的赋值

//定制“窗口类”结构

wndclass.style=0;

wndclass.lpfnWndProc=WndProc;//关联消息处理函数

wndclass.cbClsExtra=0;

wndclass.cbWndExtra=0;

wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);//光标

wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);//图标

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

wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//画刷,背景

wndclass.lpszMenuName=NULL;

wndclass.lpszClassName=strClassName;//这里最好是将类名定义为lpszClassName,这样一致易于辨认

 

 

//注册窗口类

if(!RegisterClass(&wndclass))

{

MessageBeep(0);//调用系统声音

return FALSE;

}

 

//使用已注册的窗口类,创建主窗口

hwnd=CreateWindow(strClassName,//窗口类名

strTitleName,//窗口标题

WS_OVERLAPPEDWINDOW,//窗口风格

CW_USEDEFAULT,CW_USEDEFAULT,

CW_USEDEFAULT,CW_USEDEFAULT,

NULL,NULL,

hInstance,//实例句柄

NULL);

 

ShowWindow(hwnd,nCmdShow);

UpdateWindow(hwnd);

 

//应用程序消息处理

while(GetMessage(&msg,hwnd,NULL,NULL))//从消息列队中取出消息,就是从message queue中取出消息

{

TranslateMessage(&msg);//转换消息

DispatchMessage(&msg);//派发消息

}

 

return msg.wParam;

}

 

//消息函数定义

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

{

//消息处理

switch(message)

{

case WM_DESTROY:PostQuitMessage(0);//退出消息循环

default:

return DefWindowProc(hwnd,message,wParam,lParam);//其余的消息交给由系统提供的缺省处理函数

}

return 0;

}

         其实这是最简单的窗口程序,有关wndclass类可以上网查。还有wndproc原型也可以查到,这里不做多的描述。只想与大家分享做东西的心得。

         望高手指正。。。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值