高手就别看了!
我是一个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) ;
}