#include <Windows.h>
#include "RESOURCE.H"
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
BOOL CALLBACK AboutDlgProc(HWND,UINT,WPARAM,LPARAM);
LRESULT CALLBACK EllipPushWndProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
{
static TCHAR szAppName[]=TEXT("About3");
MSG msg;
HWND hwnd;
WNDCLASS 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.lpszClassName=szAppName;
wndclass.lpszMenuName=szAppName;
if(!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT("This program requires Windows NT!"),szAppName,MB_ICONERROR);
return 0;
}
wndclass.style=CS_VREDRAW|CS_HREDRAW;
wndclass.lpfnWndProc=EllipPushWndProc;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hInstance=hInstance;
wndclass.hIcon=NULL;
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground=(HBRUSH)(COLOR_BTNFACE+1);
wndclass.lpszMenuName=NULL;
wndclass.lpszClassName=TEXT("EllipPush");
//在WinMain中注册了EllipPush类,并指定了回调函数为EllipPushWndProc
RegisterClass(&wndclass);
hwnd=CreateWindow(szAppName,TEXT("About Box Demo Program"),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;
}
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
static HINSTANCE hInstance;
switch(message)
{
case WM_CREATE:
hInstance=((LPCREATESTRUCT)lParam)->hInstance;
return 0;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDM_APP_ABOUT:
DialogBox(hInstance,TEXT("AboutBox"),hwnd,AboutDlgProc);
return 0;
}
break;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}
BOOL CALLBACK AboutDlgProc(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK:
EndDialog(hDlg,0);
return TRUE;
}
break;
}
return FALSE;
}
LRESULT CALLBACK EllipPushWndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
TCHAR szText[40];
HBRUSH hBrush;
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
switch(message)
{
case WM_PAINT:
//这边这个rect的大小只针对那个小的ok控件的
GetClientRect(hwnd,&rect);
//得到文本,后面用DrawText画上
GetWindowText(hwnd,szText,sizeof(szText));
hdc=BeginPaint(hwnd,&ps);
//创建画笔
hBrush=CreateSolidBrush(GetSysColor(COLOR_WINDOW));
//选入设备描述表
hBrush=(HBRUSH)SelectObject(hdc,hBrush);
//设置颜色
SetBkColor(hdc,GetSysColor(COLOR_WINDOW));
SetTextColor(hdc,GetSysColor(COLOR_WINDOWTEXT));
//画圆
Ellipse(hdc,rect.left,rect.top,rect.right,rect.bottom);
//写字
DrawText(hdc,szText,-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
DeleteObject(SelectObject(hdc,hBrush));
EndPaint(hwnd,&ps);
return 0;
//下面这个case语句没有return 0,直接执行到下面触发SendMessage
case WM_KEYUP:
if(wParam!=VK_SPACE)
break;
case WM_LBUTTONUP:
//向上一层窗口发消息,触发WM_COMMAND下面IDOK,最后一个参数感觉没有用到,不知道为什么要传递这个
SendMessage(GetParent(hwnd),WM_COMMAND,GetWindowLong(hwnd,GWL_ID),(LPARAM)hwnd);
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}
////////////////////////////////////////////////////////////////////////
//资源中是用到了Custom Control,我写的代码,资源文件直接复制的原程序中的。
////////////////////////////////////////////////////////////////////////
中午跟老师去喝酒了,下午睡了会,晚上还普通话考试,还好,今天算是写完了。