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