SDK按钮控件的实现

类别:VC语言 点击:0 评论:0 推荐:

高手就别看了!

我是一个SDK的初学者,下面准备学习VC。我经历了SDK的初学者的痛苦。很多书上的程序都是一些稍微复杂一些的程序。因此,我将自己调试的一些小程序,功能单一,并附上程序的详细说明,以帮助和我一样的初学者。

/////////下面是程序

/*------------------------------------------
  这个程序主要练习如何实现按钮
  显示各种按钮控件的效果,控件上的名称即为按钮的设置风格

  ------------------------------------------*/

#include <windows.h>

//下面定义菜单ID的具体数值
#define ID_PUSHME1 1
#define ID_PUSHME2 2
#define ID_PUSHME3 3
#define ID_PUSHME4 4
#define ID_PUSHME5 5
#define ID_PUSHME6 6
#define ID_PUSHME7 7
#define ID_PUSHME8 8
#define ID_PUSHME9 9
#define ID_PUSHME10 10
#define ID_PUSHME11 11
#define ID_PUSHME12 12

//窗口函数的说明
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM) ;


/////////////////////////////////////////////////////////////////////////
//主函数WinMain(),主要用来创建主窗口,并建立消息循环机制
//可使系统调用窗口函数WndProc()
//在Windows编程过程中,这个函数基本上结构一样的
//程序员一般不做太多的变动
////////////////////////////////////////////////////////////////////////
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
              PSTR szCmdLine, int iCmdShow)
     {
     static char  szAppName[] = "About1" ;
     MSG          msg ;
     HWND         hwnd ;
    
  //////////////////////////////////////////////////////
  ////注册窗口类
  WNDCLASSEX   wndclass ;

     wndclass.cbSize        = sizeof (wndclass) ;
     wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
     wndclass.lpfnWndProc   = WndProc ;
     wndclass.cbClsExtra    = 0 ;
     wndclass.cbWndExtra    = 0 ;
     wndclass.hInstance     = hInstance ;
     wndclass.hIcon         = LoadIcon (hInstance, szAppName) ;
     wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
     wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
     wndclass.lpszMenuName  = NULL;
     wndclass.lpszClassName = szAppName ;
     wndclass.hIconSm       = LoadIcon (hInstance, szAppName) ;

     RegisterClassEx (&wndclass) ;

  /////////////////////////////////////////////////////////////
  //创建窗口
     hwnd = CreateWindow (szAppName, "控件实现",
                          WS_OVERLAPPEDWINDOW,
                 CW_USEDEFAULT, CW_USEDEFAULT,
                 CW_USEDEFAULT, CW_USEDEFAULT,
                          NULL, NULL, hInstance, NULL) ;
    
 
  /////////////////////////////////////////////////////////////
     //显示和更新窗口
  ShowWindow (hwnd, iCmdShow) ;
     UpdateWindow (hwnd) ;

  //////////////////////////////////////////////////////////////
  //消息循环机制
     while (GetMessage (&msg, NULL, 0, 0))
          {
          TranslateMessage (&msg) ;
          DispatchMessage (&msg) ;
          }
    
  return msg.wParam ;        ////表示从PostQuitMessage返回的值

     }


/////////////////////////////////////////////////////////////////////////////////
//以下是窗口函数,这里是程序员主要编程的地方
//程序员可根据各种消息而设定各种效果,这里也是学习SDK主要要学习的地方
/////////////////////////////////////////////////////////////////////////////////
LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
     {
    
 
 static HINSTANCE hInstance ;
   
 
 //各菜单句柄的说明
    static HWND hbtnWnd1,hbtnWnd2,hbtnWnd3,hbtnWnd4,
           hbtnWnd5,hbtnWnd6,hbtnWnd7, hbtnWnd8,
     hbtnWnd9,hbtnWnd10,hbtnWnd11,hbtnWnd12;


 //程序中用到的字符数组定义
    static char text[]="在这里设置此按钮为edit类型,表示将控件设定为编辑框控件,可以输入文本";    
 
 
 switch (iMsg)
          {
          case WM_CREATE :
              hInstance = ((LPCREATESTRUCT) lParam)->hInstance ;
              
     hbtnWnd1=CreateWindow(
       "button",  //这里设定按钮的类型为button,其它类型有静态控件static,
                  //滚动条控件scrollbar,编辑框控件edit,列表框控件listbox

       "BS_AUTOCHECKBOX",   //这里设定按钮上显示的文本
       BS_AUTOCHECKBOX|WS_CHILD|WS_VISIBLE,
                   //按钮风格,其中必须有WS_CHILD风格,因为是子窗口,
          //这里可以设定按钮的风格和窗口的风格参数
       10,        
       40,          //(10,40)为按钮的左上角的坐标
       160,        //按钮的宽度
       30,         //按钮的高度
          hwnd,       //父窗口句柄
       (HMENU)ID_PUSHME1,        //子窗口ID,即按钮ID
       hInstance,   //实例句柄 
       NULL);       //额外参数
 
    
 ///////////////////////////////////////////////////////////
 // 下面一些按钮的定义同上面第一个按钮hbtnWnd1的定义相同,
 //  如果你只想定义一个按钮,下面11个按钮的内容你完全可以取消
 //  另外注意每个按钮的位置,长宽大小全一样
 ////////////////////////////////////////////////////////////
               hbtnWnd2=CreateWindow(
       "button",
       "BS_PUSHBUTTON",
       BS_PUSHBUTTON|WS_CHILD|WS_VISIBLE,
       180,
       40,
       160,
       30,
          hwnd,
       (HMENU)ID_PUSHME2,
       hInstance,
       NULL);

       hbtnWnd3=CreateWindow(
       "button",
       "BS_AUTORADIOBUTTON",
       BS_AUTORADIOBUTTON|WS_CHILD|WS_VISIBLE,
       350,
       40,
       180,
       30,
          hwnd,
       (HMENU)ID_PUSHME3,
       hInstance,
       NULL);

     hbtnWnd4=CreateWindow(
       "button",
       "BS_CHECKBOX",
       BS_CHECKBOX|WS_CHILD|WS_VISIBLE,
       540,
       40,
       180,
       30,
          hwnd,
       (HMENU)ID_PUSHME4,
       hInstance,
       NULL);

     hbtnWnd5=CreateWindow(
       "button",
       "BS_AUTO3STATE",
       BS_AUTO3STATE|WS_CHILD|WS_VISIBLE,
       10,
       80,
       160,
       30,
          hwnd,
       (HMENU)ID_PUSHME5,
       hInstance,
       NULL);
     
               hbtnWnd6=CreateWindow(
       "button",
       "BS_DEFPUSHBUTTON ",
       BS_DEFPUSHBUTTON|WS_CHILD|WS_VISIBLE,
       180,
       80,
       160,
       30,
          hwnd,
       (HMENU)ID_PUSHME6,
       hInstance,
       NULL);

       hbtnWnd7=CreateWindow(
       "button",
       "BS_GROUPBOX",
       BS_GROUPBOX|WS_CHILD|WS_VISIBLE,
       350,
       80,
       180,
       30,
          hwnd,
       (HMENU)ID_PUSHME7,
       hInstance,
       NULL);

     hbtnWnd8=CreateWindow(
       "button",
       "BS_LEFTTEXT",
       BS_LEFTTEXT|WS_CHILD|WS_VISIBLE,
       540,
       80,
       180,
       30,
          hwnd,
       (HMENU)ID_PUSHME8,
       hInstance,
       NULL);

                  hbtnWnd9=CreateWindow(
       "button",
       "BS_RADIOBUTTON",
       BS_RADIOBUTTON|WS_CHILD|WS_VISIBLE,
       10,
       120,
       160,
       30,
          hwnd,
       (HMENU)ID_PUSHME9,
       hInstance,
       NULL);
     
               hbtnWnd10=CreateWindow(
       "button",
       "BS_3STATE",
       BS_3STATE|WS_CHILD|WS_VISIBLE,
       180,
       120,
       160,
       30,
          hwnd,
       (HMENU)ID_PUSHME10,
       hInstance,
       NULL);

       hbtnWnd11=CreateWindow(
       "scrollbar",   //滚动条控件,点击此按钮并拖动鼠标可使窗口大小变化
        "BS_OWNERDRAW  ", //自定义控件
       BS_OWNERDRAW|WS_CHILD|WS_VISIBLE,
       350,
       120,
       180,
       30,
          hwnd,
       (HMENU)ID_PUSHME11,
       hInstance,
       NULL);


 ////////////////////////////////////////////////////////////////////
 ///下面一个是编辑框按钮,你可以在其中输入文字,具有一个简单的写字板的
    ///功能,可以复制、粘贴、剪切等操作
 ///////////////////////////////////////////////////////////////////
     hbtnWnd2=CreateWindow(
       "edit",    //在这里设置此按钮为edit类型,表示将控件设定为编辑框控件
       text,      //字符型数组在前面已经定义,在这里显示它的内容
       WS_CHILD|WS_VISIBLE|ES_MULTILINE|ES_AUTOVSCROLL|ES_AUTOHSCROLL
        |WS_HSCROLL|WS_VSCROLL|ES_LEFT|WS_BORDER,
       10,
       160,
       568,
       130,
          hwnd,
       (HMENU)ID_PUSHME12,
       hInstance,
       NULL);
    
     return 0 ;
                 
                   
          case WM_DESTROY :
               PostQuitMessage (0) ;
               return 0 ;
          }
          return DefWindowProc (hwnd, iMsg, wParam, lParam) ;
     }


 

 

本文地址:http://com.8s8s.com/it/it1944.htm