Chinaunix首页 | 论坛 | 博客
  • 博客访问: 41048
  • 博文数量: 37
  • 博客积分: 1690
  • 博客等级: 上尉
  • 技术积分: 385
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-01 14:07
文章分类

全部博文(37)

文章存档

2008年(37)

我的朋友
最近访客

分类: C/C++

2008-10-13 15:21:58

#include

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
{
    static TCHAR szAppName[] = TEXT("BtnLook");
    HWND hwnd;
    MSG msg;
    WNDCLASS wc;
    
    wc.style = CS_HREDRAW|CS_VREDRAW;
    wc.lpfnWndProc = WndProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hIcon = LoadIcon(NULL,IDI_APPLICATION);
    wc.hCursor = LoadCursor(NULL,IDC_ARROW);
    wc.hInstance = hInstance;
    wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wc.lpszMenuName = NULL;
    wc.lpszClassName = szAppName;

    if(!RegisterClass(&wc))
    {
        MessageBox(NULL,TEXT("注册窗口类失败"),szAppName,MB_ICONERROR);
        return 0;
    }

    hwnd = CreateWindow(szAppName,TEXT("按钮演示窗口"),
                        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)
{
    HDC hdc;
    static HWND ButtonHwnd;
    PAINTSTRUCT ps;
    static RECT rect;
    static int cxChar,cyChar;

    switch(message)
    {
    case WM_CREATE:
        cxChar = LOWORD(GetDialogBaseUnits());    //获得窗口并固定控制员的窗口基本单位的实际的像点大小
        cyChar = HIWORD(GetDialogBaseUnits());
       
        //创建按钮
        ButtonHwnd = CreateWindow(TEXT("button"),TEXT("演示按钮"),
                                WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
                                cxChar,0,
                                20*cxChar,7*cyChar/4,
                                hwnd,(HMENU)0,
                                ((LPCREATESTRUCT)lParam)->hInstance,NULL);
        return 0;

    case WM_SIZE:

        //定义矩形区域的大小
        rect.left = 24*cxChar;
        rect.top = 2*cyChar;
        rect.right = LOWORD(lParam);
        rect.bottom = HIWORD(lParam);
        return 0;

    case WM_PAINT:
        InvalidateRect(hwnd,&rect,TRUE);//将矩形区域加入窗口的更新区域

        hdc = BeginPaint(hwnd,&ps);
        SelectObject(hdc,GetStockObject(SYSTEM_FIXED_FONT));
        SetBkMode(hdc,TRANSPARENT);    //改变背景的绘图模式

        TextOut(hdc,24*cxChar,cyChar,TEXT("message"),lstrlen(TEXT("message")));
        TextOut(hdc,24*cxChar,cyChar,TEXT("_______"),lstrlen(TEXT("_______")));

        EndPaint(hwnd,&ps);
        return 0;

    case WM_DRAWITEM:
    case WM_COMMAND:
        ScrollWindow(hwnd,0,-cyChar,&rect,&rect);//滚动一块工作区

        hdc = GetDC(hwnd);
        SelectObject(hdc,GetStockObject(SYSTEM_FIXED_FONT));
        TextOut(hdc,24*cxChar,cyChar*(rect.bottom/cyChar-1),TEXT("按钮被单击"),lstrlen(TEXT("按钮被单击")));
        ReleaseDC(hwnd,hdc);
        ValidateRect(hwnd,&rect);//从窗口的更新区域移走一块矩形区域
        break;

    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    }
    return DefWindowProc(hwnd,message,wParam,lParam);
}


 
阅读(785) | 评论(1) | 转发(0) |
0

上一篇:C++:声明与定义的区别

下一篇:菜单制作

给主人留下些什么吧!~~

chinaunix网友2011-02-01 18:07:22

谢啦