一个简单的window窗体的实现

 

    随便写点吧,写什么呢,就写一下最近windows编程的一点心得吧。 如有不对的地方还请纠正。提到windows编程就不得不提windowsAPI(s视

 

窗操作系统应用程序接口),简称winapi , 它是microsoft提供给程序员最方便的和系统内核打交道的接口,它的设计为C和C++程序所调用。

 

winapi最初的时候只有大约400个左右的函数,但是历经多年的改善,现在已经有上千个,这些函数涵盖了你可以想象到得所有windows方面得应用

 

比如图形化用户界面,网络服务,图形设备接口等等。早期的windows编程比较繁琐,你不得不去用C去写一些界面出来,随着一些不错的IDE的出现

 

,像VS, 它大大的简化了开发的难度,使得coder更加的专心于设计,算法,而不是到处的找文档,找出这个或者那个的控件的参数是什么含义,随

 

着MFC和window Form的出现,基本上是实现了可视化的编程。

 

    废话说了一堆,这里我只是简单的介绍一下使用winapi写一个window应该注意的一些问题。一个windows程序应该包含两个基本元素,一个是

 

winmain(), 另一个是windowproc(). winmain()很像c语言中的main()函数,它是一个程序的入口点,所有的东西都要在这里调用。

 

winmain()的

 

定义如下:   int  WINAPI WinMain(HINSTANCE hInstance, HINSTANCE HpreInstance,LPSTR lpCmdLine,int nCmdShow); 它的返

 

 

类型是一个整数, 那么后面跟着的WINAPI又是什么意思呢? 它其实是个被定义的宏, 由于winmain()函数是被系统调用的,而windows规定所有

 

被系统调用的函数必须是采用PASCAL的调用方式--》函数在返回调用者之前将参数从堆栈中删除。winmain()中有四个参数,第一个参数的意思就是

 

代表了当前正在运行的程序,windows用一些整形数字来识别一些东西,例如正在运行的程序。第二个参数在32位windows系统中已经被抛弃,赋

 

值为NULL。第三个参数一般是用命令行启动时才需要用,允许你启动程序的时候带一些参数。第四个参数是决定window生成时候的样子,比如最

 

大化或者最小化。

 

windowproc()决定了一个window的行为,它负责处理关于windows中的消息。 函数定义如下:

 

LRESULT CALLBACK WindowProc(HWND hWnd,UINT message,WPARAM wParam, LPARAM lParam);

 

LRESULT是windows定义的一个类型,相当于C语言中的long.由于windowproc被调用是通过指针,所以呢,一定要保证它是一个可以被

 

CALLBACK的函数。 HWND是处理由具体的事件所引起的消息,比如拖动窗口。UINT 是用来显示发生消息的类型。至于lparam和wparam具体

 

传递的信息取决于消息的类型。

 

昨天晚上睡着了,隔了两天再来写发现思路跟不上了,恩,就把代码发上来吧。

 

code:

 

#include<windows.h>


LRESULT WINAPI WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){

HDC hDC;
PAINTSTRUCT PaintSt;
RECT aRect;

switch(message){
  case WM_PAINT:
      hDC=BeginPaint(hWnd,&PaintSt);
      GetClientRect(hWnd,&aRect);
      SetBkMode(hDC,TRANSPARENT);

      DrawText(
          hDC,
          L"But,soft!What light through yonder window breaks?",
          -1,
          &aRect,
          DT_SINGLELINE|DT_CENTER|DT_VCENTER
          );
      EndPaint(hWnd,&PaintSt);
      return 0;

  case WM_DESTROY:
      PostQuitMessage(0);
      return 0;

  default:
      return DefWindowProc(hWnd,message,wParam,lParam);
}
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow){

WNDCLASSEX WindowClass;

static LPCTSTR szAppName=L"OFWin";
HWND hWnd;
MSG msg;

WindowClass.cbSize=sizeof(WNDCLASSEX);

WindowClass.style=CS_HREDRAW|CS_VREDRAW;

WindowClass.lpfnWndProc=WindowProc;

WindowClass.cbClsExtra=0;
WindowClass.cbWndExtra=0;

WindowClass.hInstance=hInstance;


WindowClass.hIcon=LoadIcon(0,IDI_APPLICATION);
WindowClass.hCursor=LoadCursor(0,IDC_ARROW);

WindowClass.hbrBackground=static_cast<HBRUSH>(GetStockObject(GRAY_BRUSH));

WindowClass.lpszMenuName=0;
WindowClass.lpszClassName=szAppName;
WindowClass.hIconSm=0;

RegisterClassEx(&WindowClass);

hWnd=CreateWindow(
                  szAppName,
                  L"A Basic Window the Hard Way",
                  WS_OVERLAPPEDWINDOW,
                  CW_USEDEFAULT,
                  CW_USEDEFAULT,
                  CW_USEDEFAULT,
                  CW_USEDEFAULT,
                  0,
                  0,
                  hInstance,
                  0
                  );
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);

while(GetMessage(&msg,0,0,0)==TRUE)
{
       TranslateMessage(&msg);
       DispatchMessage(&msg);
}
return static_cast<int>(msg.wParam);
}

 

编译环境: windowsXP PACK2

VS 2008

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值