创建一个windows窗体--学习笔记一

创建一个windows窗体主要的代码就是以下的内容:

 

#include "stdafx.h"
#include <windows.h>

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
  // TODO: Place code here.
 static TCHAR szAppName[] = "HelloWin";
 HWND hWnd;
 MSG msg;
 WNDCLASS WndClass;

 WndClass.style = CS_HREDRAW | CS_VREDRAW;
 WndClass.lpfnWndProc = 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 = szAppName;

 if(!RegisterClass(&WndClass))
 {
  MessageBox(NULL,TEXT("This program requires windows NT"),TEXT(szAppName),MB_ICONERROR);
  return 0;
 }
 
 hWnd = CreateWindow(szAppName,
  TEXT("The Hello Program."),
  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 uMsg,WPARAM wParam,LPARAM lParam)
{
 HDC hdc;
 PAINTSTRUCT ps;
 RECT rect;

 switch(uMsg)
 {
 case WM_PAINT:
  hdc = BeginPaint(hwnd,&ps);
  GetClientRect(hwnd,&rect);
  DrawText(hdc,TEXT("This is a test for HelloWin."),-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
  EndPaint(hwnd,&ps);
  return 0;
 case WM_DESTROY:
  PostQuitMessage(0);
  return 0;
 }
 return DefWindowProc(hwnd,uMsg,wParam,lParam);
}

 

实际上,每一个Windows程序代码中都包括程序的大部分。没人能真正记住此程序的全部写法;通常,Windows程序写作者在开始写一个新程序时总是会复制一个现有的程序,然后再做相应的修改。

 

Windows函数呼叫

HELLOWIN至少呼叫了18个Windows函数。下面以它们在HELLOWIN中出现的次序列出这些函数以及各自的简明描述:

  • LoadIcon 加载图标供程序使用。
     
  • LoadCursor 加载鼠标光标供程序使用。
     
  • GetStockObject 取得一个图形对象(在这个例子中,是取得绘制窗口背景的画刷对象)。
     
  • RegisterClass 为程序窗口注册窗口类别。
     
  • MessageBox 显示消息框。
     
  • CreateWindow 根据窗口类别建立一个窗口。
     
  • ShowWindow 在屏幕上显示窗口。
     
  • UpdateWindow 指示窗口自我更新。
     
  • GetMessage 从消息队列中取得消息。
     
  • TranslateMessage 转译某些键盘消息。
     
  • DispatchMessage 将消息发送给窗口消息处理程序。
     
  • PlaySound 播放一个声音文件。
     
  • BeginPaint 开始绘制窗口。
     
  • GetClientRect 取得窗口显示区域的大小。
     
  • DrawText 显示字符串。
     
  • EndPaint 结束绘制窗口。
     
  • PostQuitMessage 在消息队列中插入一个「退出程序」消息。
     
  • DefWindowProc 执行内定的消息处理。
     

这些函数均在Platform SDK文件中说明,并在不同的表头文件中声明,其中绝大多数声明在WINUSER.H中。

 

大写字母标识符

读者可能注意到,HELLOWIN.C中有几个大写的标识符,这些标识符是在Windows表头文件中定义的。有些标识符含有两个字母或者三个字母的前缀,这些前缀后头接着一个底线:


 

这些是简单的数值常数。前缀指示该常数所属的类别,如表3-1所示。

表3-1

前缀

类别

CS

窗口类别样式

CW

建立窗口

DT

绘制文字

IDI

图示ID

IDC

游标ID

MB

消息框

SND

声音

WM

窗口消息

WS

窗口样式

奉劝程序写作者不要费力气去记忆Windows程序设计中的数值常数。实际上,Windows中使用的每个数值常数在表头文件中均有相应的标识符定义。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值