#include <windows.h> #include <tchar.h> LRESULT CALLBACK WinMessageProc( HWND hwnd, // handle to window UINT uMsg, // message identifier WPARAM wParam, // first message parameter LPARAM lParam // second message parameter ); int WINAPI _tWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nShowCmd ) { //注册一个名叫MyWindowClass的窗口类 WNDCLASSEX wc; wc.cbSize = sizeof( wc ); wc.style = CS_VREDRAW | CS_HREDRAW; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.hCursor = LoadCursor( NULL, IDC_ARROW ); wc.hIcon = LoadIcon( NULL, IDI_APPLICATION ); wc.hIconSm = LoadIcon( NULL, IDI_APPLICATION ); wc.hInstance = hInstance; wc.lpfnWndProc = WinMessageProc; wc.lpszMenuName = NULL; wc.lpszClassName = _T("MyWindowClass"); if( !RegisterClassEx( &wc ) ) { MessageBox( NULL, _T("注册窗口类出错"), _T("出错"), MB_OK ); return 0; } // 根据上面注册的一个名叫MyWindowClass 的窗口类创建窗口 HWND newWind = CreateWindowEx( 0L, _T("MyWindowClass"), _T("beyondcode"), WS_OVERLAPPEDWINDOW, 500,//x 150, //y 200,//width 200,//height NULL, NULL, hInstance, NULL ); if( NULL==newWind ) { MessageBox( NULL, _T("创建窗口出错"), _T("出错"), MB_OK ); return 0; } ShowWindow( newWind, nShowCmd ); UpdateWindow( newWind ); MSG msg; while( GetMessage( &msg, NULL, 0, 0 ) ) { TranslateMessage( &msg ); DispatchMessage( &msg ); } return 0; } LRESULT CALLBACK WinMessageProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )//他们的值都是系统传递进来的。你只是根据他们来判断是哪个窗口的什么消息,并且获取该消息的额外参数信息。 { HWND hButton;//按钮句柄 const int buttonWidth = 80; //按钮的宽 const int buttonHeight = 25; //按钮的高 HWND hEdit;//编辑框句柄 const int editWidth = 120;//编辑框宽 const int editHeight = 40;//编辑框高 HINSTANCE hInst;//程序实例句柄 switch ( msg ) { case WM_CREATE: RECT rctClient;//用来存放主窗口客户区大小信息 GetClientRect(hwnd,&rctClient);//得到主窗口客户区的大小信息 hInst = (HINSTANCE)GetWindowLong( hwnd, GWL_HINSTANCE );//获得有关指定窗口的信息 //================================================================================================ hButton = CreateWindowEx( 0L,//指定窗口的扩展风格,0L中的L是16进制,0L表示不使用扩展风格 _T("button"),//窗口的类名 _T("点我吗?"), //指向一个指定窗口名的空结束的字符串指针,当使用CreateWindow函数来创建控制例如按钮,选择框和静态控制时,可使用lpWindowName来指定控制文本。 WS_VISIBLE | WS_CHILD, //指定创建窗口的风格 创建一个初始状态为可见的窗口|创建一个子窗口 rctClient.right/2-buttonWidth/2, //对于子窗口,x是子窗口左上角相对父窗口客户区左上角的初始X坐标 rctClient.bottom/2-buttonHeight/2,//对于子窗口,y是子窗口左上角相对父窗口客户区左上角的初始y坐标 buttonWidth, //窗口的宽度 buttonHeight, //窗口的高度 hwnd,//指向被创建窗口的父窗口或所有者窗口的旬柄 (HMENU)2,//菜单句柄,或依据窗口风格指明一个子窗口标识,对于子窗口,hMenu指定了该子窗口标识(一个整型量),一个对话框使用这个整型值将事件通知父类。应用程序确定子窗口标识,这个值对于相同父窗口的所有子窗口必须是唯一的。 hInst, //与窗口相关联的模块事例的句柄 NULL ); SetWindowText( hwnd, _T("自定义对话框") ); //================================================================================================================ hEdit = CreateWindowEx(0L, _T("edit"), _T("我是编辑框"), WS_VISIBLE|WS_CHILD|WS_BORDER, rctClient.right/2-editWidth/2, rctClient.bottom/2-buttonHeight/2-editHeight, editWidth, editHeight, hwnd, (HMENU)3, hInst, NULL); SetWindowText(hEdit,_T("心如静水,心坚石穿")); break; case WM_DESTROY: { PostQuitMessage( 0 ); break; } default: return DefWindowProc( hwnd, msg, wParam, lParam ); } return 0; }