用c 或者 c++
均可不用mfc!!请高手帮忙给个例子十分感谢!!!!!

解决方案 »

  1.   

    创建一个按钮   
    CreateWindow("Button","OK",WS_VISIBLE | WS_CHILD,0,0,100,100,this->m_hWnd,NULL,NULL,NULL);
      

  2.   

    我说的是自己编写的button 
      

  3.   

    // OwnerDraw button in SDK application
    #include <windows.h>
    #include "commctrl.h"
    #define MAX_LOADSTRING 100
    HINSTANCE hInst; // current instance
    TCHAR szTitle[MAX_LOADSTRING]; // The title bar text
    TCHAR szWindowClass[MAX_LOADSTRING]; // The title bar textATOM MyRegisterClass(HINSTANCE hInstance);
    BOOL InitInstance(HINSTANCE, int);
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow)
    {
    MSG msg;
    lstrcpy(szTitle,"APPtitle");
    lstrcpy(szWindowClass,"Wndcls");
    MyRegisterClass(hInstance); if (!InitInstance (hInstance, nCmdShow)) 
    {
    return FALSE;
    } while (GetMessage(&msg, NULL, 0, 0)) 
    {
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }
    } return msg.wParam;
    }ATOM MyRegisterClass(HINSTANCE hInstance)
    {
    WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX);  wcex.style = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc = (WNDPROC)WndProc;
    wcex.cbClsExtra = 0;
    wcex.cbWndExtra = 0;
    wcex.hInstance = hInstance;
    wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_APPLICATION);
    wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName = NULL;
    wcex.lpszClassName = szWindowClass;
    wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_APPLICATION); return RegisterClassEx(&wcex);
    }BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
    {
       HWND hWnd;
       hInst = hInstance; // Store instance handle in our global variable
       hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
          CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
       if (!hWnd)
       {
          return FALSE;
       }
       ShowWindow(hWnd, nCmdShow);
       UpdateWindow(hWnd);   return TRUE;
    }
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    PAINTSTRUCT ps;
    HDC hdc;
    TCHAR szHello[MAX_LOADSTRING];
    lstrcpy(szHello,"ho");
    LPDRAWITEMSTRUCT lpdrawitem=NULL;
    HWND hbutton;
    switch (message) 
    {
    case WM_CREATE:
    hbutton=CreateWindow("BUTTON","OWnerdraw",WS_CHILD|WS_VISIBLE|BS_OWNERDRAW,10,80,440,30,hWnd,(HMENU)1234,hInst,0);
    CreateWindow("BUTTON","Not Owner Draw",WS_CHILD|WS_VISIBLE,10,120,440,30,hWnd,(HMENU)1235,hInst,0);
    break;
    case WM_DRAWITEM:
    {
    lpdrawitem=(LPDRAWITEMSTRUCT)lParam;
    if(lpdrawitem->CtlID!=1234)
    return 0;
    char cbuf[256];
    switch(lpdrawitem->itemAction)
    {
    case ODA_DRAWENTIRE:
    lstrcpy(cbuf,"itemAction:ODA_DRAWENTIRE ;");
    break;
    case ODA_FOCUS:
    lstrcpy(cbuf,"itemAction:ODA_FOCUS ;");
    break;
    case ODA_SELECT:
    lstrcpy(cbuf,"itemAction:ODA_SELECT ;");
    break;
    }
    switch(lpdrawitem->itemState)
    {
    case ODS_CHECKED:
    lstrcat(cbuf,"itemState:ODS_CHECKED");
    break;
    case ODS_COMBOBOXEDIT:
    lstrcat(cbuf,"itemState:ODS_COMBOBOXEDIT");
    break;
    case ODS_DEFAULT:
    lstrcat(cbuf,"itemState:ODS_DEFAULT");
    break;
    case ODS_DISABLED:
    lstrcat(cbuf,"itemState:ODS_DISABLED");
    break;
    case ODS_FOCUS:
    lstrcat(cbuf,"itemState:ODS_FOCUS");
    break;
    case ODS_GRAYED:
    lstrcat(cbuf,"itemState:ODS_GRAYED");
    break;
    case ODS_HOTLIGHT:
    lstrcat(cbuf,"itemState:ODS_HOTLIGHT");
    break;

    case ODS_INACTIVE:
    lstrcat(cbuf,"itemState:ODS_INACTIVE");
    break;
    case ODS_SELECTED:
    lstrcat(cbuf,"itemState:ODS_SELECTED");
    break;
    }
    TextOut(lpdrawitem->hDC,lpdrawitem->rcItem.left,lpdrawitem->rcItem.top,cbuf,strlen(cbuf));
    }

    break;
    case WM_PAINT:
    hdc = BeginPaint(hWnd, &ps);
    RECT rt;
    GetClientRect(hWnd, &rt);
    DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER);
    EndPaint(hWnd, &ps);
    break;
    case WM_DESTROY:
    PostQuitMessage(0);
    break;
    default:
    return DefWindowProc(hWnd, message, wParam, lParam);
       }
       return 0;
    }
      

  4.   

    // OwnerDraw button in SDK application
    #include <windows.h>
    #include "commctrl.h"
    #define MAX_LOADSTRING 100
    HINSTANCE hInst; // current instance
    TCHAR szTitle[MAX_LOADSTRING]; // The title bar text
    TCHAR szWindowClass[MAX_LOADSTRING]; // The title bar textATOM MyRegisterClass(HINSTANCE hInstance);
    BOOL InitInstance(HINSTANCE, int);
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow)
    {
    MSG msg;
    lstrcpy(szTitle,"APPtitle");
    lstrcpy(szWindowClass,"Wndcls");
    MyRegisterClass(hInstance); if (!InitInstance (hInstance, nCmdShow)) 
    {
    return FALSE;
    } while (GetMessage(&msg, NULL, 0, 0)) 
    {
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }
    } return msg.wParam;
    }ATOM MyRegisterClass(HINSTANCE hInstance)
    {
    WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX);  wcex.style = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc = (WNDPROC)WndProc;
    wcex.cbClsExtra = 0;
    wcex.cbWndExtra = 0;
    wcex.hInstance = hInstance;
    wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_APPLICATION);
    wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName = NULL;
    wcex.lpszClassName = szWindowClass;
    wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_APPLICATION); return RegisterClassEx(&wcex);
    }BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
    {
       HWND hWnd;
       hInst = hInstance; // Store instance handle in our global variable
       hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
          CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
       if (!hWnd)
       {
          return FALSE;
       }
       ShowWindow(hWnd, nCmdShow);
       UpdateWindow(hWnd);   return TRUE;
    }
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    PAINTSTRUCT ps;
    HDC hdc;
    TCHAR szHello[MAX_LOADSTRING];
    lstrcpy(szHello,"ho");
    LPDRAWITEMSTRUCT lpdrawitem=NULL;
    HWND hbutton;
    switch (message) 
    {
    case WM_CREATE:
    hbutton=CreateWindow("BUTTON","OWnerdraw",WS_CHILD|WS_VISIBLE|BS_OWNERDRAW,10,80,440,30,hWnd,(HMENU)1234,hInst,0);
    CreateWindow("BUTTON","Not Owner Draw",WS_CHILD|WS_VISIBLE,10,120,440,30,hWnd,(HMENU)1235,hInst,0);
    break;
    case WM_DRAWITEM:
    {
    lpdrawitem=(LPDRAWITEMSTRUCT)lParam;
    if(lpdrawitem->CtlID!=1234)
    return 0;
    char cbuf[256];
    switch(lpdrawitem->itemAction)
    {
    case ODA_DRAWENTIRE:
    lstrcpy(cbuf,"itemAction:ODA_DRAWENTIRE ;");
    break;
    case ODA_FOCUS:
    lstrcpy(cbuf,"itemAction:ODA_FOCUS ;");
    break;
    case ODA_SELECT:
    lstrcpy(cbuf,"itemAction:ODA_SELECT ;");
    break;
    }
    switch(lpdrawitem->itemState)
    {
    case ODS_CHECKED:
    lstrcat(cbuf,"itemState:ODS_CHECKED");
    break;
    case ODS_COMBOBOXEDIT:
    lstrcat(cbuf,"itemState:ODS_COMBOBOXEDIT");
    break;
    case ODS_DEFAULT:
    lstrcat(cbuf,"itemState:ODS_DEFAULT");
    break;
    case ODS_DISABLED:
    lstrcat(cbuf,"itemState:ODS_DISABLED");
    break;
    case ODS_FOCUS:
    lstrcat(cbuf,"itemState:ODS_FOCUS");
    break;
    case ODS_GRAYED:
    lstrcat(cbuf,"itemState:ODS_GRAYED");
    break;
    case ODS_HOTLIGHT:
    lstrcat(cbuf,"itemState:ODS_HOTLIGHT");
    break;

    case ODS_INACTIVE:
    lstrcat(cbuf,"itemState:ODS_INACTIVE");
    break;
    case ODS_SELECTED:
    lstrcat(cbuf,"itemState:ODS_SELECTED");
    break;
    }
    TextOut(lpdrawitem->hDC,lpdrawitem->rcItem.left,lpdrawitem->rcItem.top,cbuf,strlen(cbuf));
    }

    break;
    case WM_PAINT:
    hdc = BeginPaint(hWnd, &ps);
    RECT rt;
    GetClientRect(hWnd, &rt);
    DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER);
    EndPaint(hWnd, &ps);
    break;
    case WM_DESTROY:
    PostQuitMessage(0);
    break;
    default:
    return DefWindowProc(hWnd, message, wParam, lParam);
       }
       return 0;
    }
      

  5.   

    // OwnerDraw button in SDK application
    #include <windows.h>
    #include "commctrl.h"
    #define MAX_LOADSTRING 100
    HINSTANCE hInst; // current instance
    TCHAR szTitle[MAX_LOADSTRING]; // The title bar text
    TCHAR szWindowClass[MAX_LOADSTRING]; // The title bar textATOM MyRegisterClass(HINSTANCE hInstance);
    BOOL InitInstance(HINSTANCE, int);
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow)
    {
    MSG msg;
    lstrcpy(szTitle,"APPtitle");
    lstrcpy(szWindowClass,"Wndcls");
    MyRegisterClass(hInstance); if (!InitInstance (hInstance, nCmdShow)) 
    {
    return FALSE;
    } while (GetMessage(&msg, NULL, 0, 0)) 
    {
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }
    } return msg.wParam;
    }ATOM MyRegisterClass(HINSTANCE hInstance)
    {
    WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX);  wcex.style = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc = (WNDPROC)WndProc;
    wcex.cbClsExtra = 0;
    wcex.cbWndExtra = 0;
    wcex.hInstance = hInstance;
    wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_APPLICATION);
    wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName = NULL;
    wcex.lpszClassName = szWindowClass;
    wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_APPLICATION); return RegisterClassEx(&wcex);
    }BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
    {
       HWND hWnd;
       hInst = hInstance; // Store instance handle in our global variable
       hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
          CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
       if (!hWnd)
       {
          return FALSE;
       }
       ShowWindow(hWnd, nCmdShow);
       UpdateWindow(hWnd);   return TRUE;
    }
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    PAINTSTRUCT ps;
    HDC hdc;
    TCHAR szHello[MAX_LOADSTRING];
    lstrcpy(szHello,"ho");
    LPDRAWITEMSTRUCT lpdrawitem=NULL;
    HWND hbutton;
    switch (message) 
    {
    case WM_CREATE:
    hbutton=CreateWindow("BUTTON","OWnerdraw",WS_CHILD|WS_VISIBLE|BS_OWNERDRAW,10,80,440,30,hWnd,(HMENU)1234,hInst,0);
    CreateWindow("BUTTON","Not Owner Draw",WS_CHILD|WS_VISIBLE,10,120,440,30,hWnd,(HMENU)1235,hInst,0);
    break;
    case WM_DRAWITEM:
    {
    lpdrawitem=(LPDRAWITEMSTRUCT)lParam;
    if(lpdrawitem->CtlID!=1234)
    return 0;
    char cbuf[256];
    switch(lpdrawitem->itemAction)
    {
    case ODA_DRAWENTIRE:
    lstrcpy(cbuf,"itemAction:ODA_DRAWENTIRE ;");
    break;
    case ODA_FOCUS:
    lstrcpy(cbuf,"itemAction:ODA_FOCUS ;");
    break;
    case ODA_SELECT:
    lstrcpy(cbuf,"itemAction:ODA_SELECT ;");
    break;
    }
    switch(lpdrawitem->itemState)
    {
    case ODS_CHECKED:
    lstrcat(cbuf,"itemState:ODS_CHECKED");
    break;
    case ODS_COMBOBOXEDIT:
    lstrcat(cbuf,"itemState:ODS_COMBOBOXEDIT");
    break;
    case ODS_DEFAULT:
    lstrcat(cbuf,"itemState:ODS_DEFAULT");
    break;
    case ODS_DISABLED:
    lstrcat(cbuf,"itemState:ODS_DISABLED");
    break;
    case ODS_FOCUS:
    lstrcat(cbuf,"itemState:ODS_FOCUS");
    break;
    case ODS_GRAYED:
    lstrcat(cbuf,"itemState:ODS_GRAYED");
    break;
    case ODS_HOTLIGHT:
    lstrcat(cbuf,"itemState:ODS_HOTLIGHT");
    break;

    case ODS_INACTIVE:
    lstrcat(cbuf,"itemState:ODS_INACTIVE");
    break;
    case ODS_SELECTED:
    lstrcat(cbuf,"itemState:ODS_SELECTED");
    break;
    }
    TextOut(lpdrawitem->hDC,lpdrawitem->rcItem.left,lpdrawitem->rcItem.top,cbuf,strlen(cbuf));
    }

    break;
    case WM_PAINT:
    hdc = BeginPaint(hWnd, &ps);
    RECT rt;
    GetClientRect(hWnd, &rt);
    DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER);
    EndPaint(hWnd, &ps);
    break;
    case WM_DESTROY:
    PostQuitMessage(0);
    break;
    default:
    return DefWindowProc(hWnd, message, wParam, lParam);
       }
       return 0;
    }
      

  6.   

    The above code should works. I wrote and tested it today. Due to makeup of csdn, you may need to realign some lines.
    to draw owner draw control in SDK, the key is owner-draw style(BS_OWNERDRAW) and WM_DRAWITEM message.
      

  7.   

    如果有太多错误可能是你在VC的选项中包含头文件的路径顺序设置时把PlatformSDK\Include设置在了VC的INCLUDE之前了。我编译时错误只是说ODS_HOTLIGHT和ODS_INACTIVE没有声明。我把这两个CASE去掉就没事了。
      

  8.   

    我查了一下,上面说到的两个常只有在win2000以上的版本才行。
    在头文件winuser.h中定义的。
    #if(WINVER >= 0x0500)
    #define ODS_HOTLIGHT        0x0040
    #define ODS_INACTIVE        0x0080
    #endif /* WINVER >= 0x0500 */
      

  9.   

    to masterz:我注意到其中还是用到了button 控件有没有高手完全不用button 子窗口类的??请高手说说 做法to 小龙: 谢谢你的回答,我去测试一下
      

  10.   

    给个范例给你吧,这是我在做一个打字练习程序的部分代码:)// ChsTest.cpp : Defines the entry point for the application.
    //#include "stdafx.h"
    #include "resource.h"#define CS_TEST (CS_VREDRAW | CS_HREDRAW | CS_DBLCLKS)#define IDC_START 1100
    #define IDC_PAUSE 1101
    #define IDC_HELP1 1102
    #define IDC_EXIT1 1103#define MAINWNDCLASSNAME _T("CHSTESTMAINWNDCLASS")typedef struct _tagMYBUTTONS{
    BOOL bOverS;
    BOOL bOverP;
    BOOL bOverH;
    BOOL bOverE;
    RECT rcStart;
    RECT rcPause;
    RECT rcHelp;
    RECT rcExit;
    }MYBUTTONS,NEAR * PMYBUTTONS,FAR * LPMYBUTTONS;HBITMAP hStartOver = NULL;
    HBITMAP hStartDown = NULL;
    HBITMAP hStartOut = NULL;
    HBITMAP hPauseOver = NULL;
    HBITMAP hPauseDown = NULL;
    HBITMAP hPauseOut = NULL;
    HBITMAP hHelpOver = NULL;
    HBITMAP hHelpDown = NULL;
    HBITMAP hHelpOut = NULL;
    HBITMAP hExitOver = NULL;
    HBITMAP hExitDown = NULL;
    HBITMAP hExitOut = NULL;
    HWND hMainWnd = NULL;
    HINSTANCE hMainInst = NULL;
    MYBUTTONS Buttons;
    RECT rc;BOOL CreateMainWindow(HINSTANCE,int);
    VOID InitVariable(VOID);
    LRESULT CALLBACK MainWndProc(HWND,UINT,WPARAM,LPARAM);
    BOOL RegisterChsTestClass(HINSTANCE);
    BOOL UpdateButton(HWND,HDC,int,UINT);int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow)
    {
    MSG uMsg; if(!RegisterChsTestClass(hInstance))
    {
    MessageBox(NULL,_T("注册类失败!"),_T("失败!"),MB_OK | MB_ICONERROR);
    return 0;
    } if(!CreateMainWindow(hInstance,nCmdShow))
    {
    MessageBox(NULL,_T("创建窗口失败!"),_T("失败!"),MB_OK | MB_ICONERROR);
    return 0;
    } InitVariable(); while(GetMessage(&uMsg,NULL,0,0)) 
    {
    TranslateMessage(&uMsg);
    DispatchMessage(&uMsg);
    } return uMsg.wParam;
    }BOOL RegisterChsTestClass(HINSTANCE hInstance)
    {
    WNDCLASSEX wcex;    wcex.cbSize         = sizeof(WNDCLASSEX);
        wcex.style          = CS_TEST;
        wcex.lpfnWndProc    = (WNDPROC)MainWndProc;
        wcex.cbClsExtra     = 0;
        wcex.cbWndExtra     = 2 * sizeof(DWORD);
        wcex.hInstance      = hInstance;
        wcex.hCursor        = LoadCursor(NULL,IDC_ARROW);
        wcex.hIcon          = LoadIcon(hInstance,MAKEINTRESOURCE(IDI_MAINICON));
        wcex.lpszMenuName   = (LPTSTR)NULL;
        wcex.lpszClassName  = MAINWNDCLASSNAME;
        wcex.hbrBackground  = CreateSolidBrush(RGB(255,252,232));
        wcex.hIconSm        = NULL;

        if(!RegisterClassEx(&wcex))
            return FALSE; hMainInst = hInstance; return TRUE;
    }BOOL CreateMainWindow(HINSTANCE hInstance,int nCmdShow)
    {
    HWND hWnd = NULL; hWnd = CreateWindowEx(WS_EX_WINDOWEDGE,
    MAINWNDCLASSNAME,
    _T("测试"),
    WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT,
    0,
    CW_USEDEFAULT,
    0,
    NULL,
    NULL,
    hInstance,
    NULL); if(!hWnd)
    return FALSE; ShowWindow(hWnd,SW_SHOWMAXIMIZED); hMainWnd = hWnd; return TRUE;
    }VOID InitVariable()
    {
    ZeroMemory(&Buttons,sizeof(MYBUTTONS));
    Buttons.bOverE = FALSE;
    Buttons.bOverH = FALSE;
    Buttons.bOverP = FALSE;
    Buttons.bOverS = FALSE;
    SetRect(&Buttons.rcStart,625,180,625 + 120,180 + 80);
    SetRect(&Buttons.rcPause,625,280,625 + 120,280 + 80);
    SetRect(&Buttons.rcHelp,625,380,625 + 120,380 + 80);
    SetRect(&Buttons.rcExit,625,480,625 + 120,480 + 80); return;
    }BOOL UpdateButton(HWND hWnd,HDC hDC,int nID,UINT uMsg)
    {
    HDC hMemDC = NULL;
    RECT rc1;
    hMemDC = CreateCompatibleDC(hDC);
    switch(nID)
    {
    case IDC_START:
    CopyMemory(&rc1,&Buttons.rcStart,sizeof(RECT));
    switch(uMsg)
    {
    case NULL:
    SelectObject(hMemDC,hStartOut);
    break;
    case WM_MOUSEMOVE:
    SelectObject(hMemDC,hStartOver);
    break;
    case WM_LBUTTONDOWN:
    SelectObject(hMemDC,hStartDown);
    break;
    case WM_LBUTTONUP:
    SelectObject(hMemDC,hStartOver);
    break;
    }
    break;
    case IDC_PAUSE:
    CopyMemory(&rc1,&Buttons.rcPause,sizeof(RECT));
    switch(uMsg)
    {
    case NULL:
    SelectObject(hMemDC,hPauseOut);
    break;
    case WM_MOUSEMOVE:
    SelectObject(hMemDC,hPauseOver);
    break;
    case WM_LBUTTONDOWN:
    SelectObject(hMemDC,hPauseDown);
    break;
    case WM_LBUTTONUP:
    SelectObject(hMemDC,hPauseOver);
    break;
    }
    break;
    case IDC_HELP1:
    CopyMemory(&rc1,&Buttons.rcHelp,sizeof(RECT));
    switch(uMsg)
    {
    case NULL:
    SelectObject(hMemDC,hHelpOut);
    break;
    case WM_MOUSEMOVE:
    SelectObject(hMemDC,hHelpOver);
    break;
    case WM_LBUTTONDOWN:
    SelectObject(hMemDC,hHelpDown);
    break;
    case WM_LBUTTONUP:
    SelectObject(hMemDC,hHelpOver);
    break;
    }
    break;
    case IDC_EXIT1:
    CopyMemory(&rc1,&Buttons.rcExit,sizeof(RECT));
    switch(uMsg)
    {
    case NULL:
    SelectObject(hMemDC,hExitOut);
    break;
    case WM_MOUSEMOVE:
    SelectObject(hMemDC,hExitOver);
    break;
    case WM_LBUTTONDOWN:
    SelectObject(hMemDC,hExitDown);
    break;
    case WM_LBUTTONUP:
    SelectObject(hMemDC,hExitOver);
    break;
    }
    break;
    }
    BitBlt(hDC,rc1.left,rc1.top,rc1.right - rc1.left,rc1.bottom - rc1.top,hMemDC,0,0,SRCCOPY);
    DeleteDC(hMemDC); return TRUE;
    }
      

  11.   

    看来还要贴一回:)LRESULT CALLBACK MainWndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
    {
    HDC hDC = NULL;
    POINT pt;
    switch (uMsg) 
    {
    case WM_CREATE:
    hStartOver = LoadBitmap(hMainInst,MAKEINTRESOURCE(IDB_STARTOVER));
    hStartDown = LoadBitmap(hMainInst,MAKEINTRESOURCE(IDB_STARTDOWN));
    hStartOut = LoadBitmap(hMainInst,MAKEINTRESOURCE(IDB_STARTOUT));
    hPauseOver = LoadBitmap(hMainInst,MAKEINTRESOURCE(IDB_PAUSEOVER));
    hPauseDown = LoadBitmap(hMainInst,MAKEINTRESOURCE(IDB_PAUSEDOWN));
    hPauseOut = LoadBitmap(hMainInst,MAKEINTRESOURCE(IDB_PAUSEOUT));
    hHelpOver = LoadBitmap(hMainInst,MAKEINTRESOURCE(IDB_HELPOVER));
    hHelpDown = LoadBitmap(hMainInst,MAKEINTRESOURCE(IDB_HELPDOWN));
    hHelpOut = LoadBitmap(hMainInst,MAKEINTRESOURCE(IDB_HELPOUT));
    hExitOver = LoadBitmap(hMainInst,MAKEINTRESOURCE(IDB_EXITOVER));
    hExitDown = LoadBitmap(hMainInst,MAKEINTRESOURCE(IDB_EXITDOWN));
    hExitOut = LoadBitmap(hMainInst,MAKEINTRESOURCE(IDB_EXITOUT));
    break; case WM_PAINT:
    PAINTSTRUCT ps;
    hDC = BeginPaint(hWnd,&ps); if(Buttons.bOverS)
    UpdateButton(hWnd,hDC,IDC_START,WM_MOUSEMOVE);
    else
    UpdateButton(hWnd,hDC,IDC_START,NULL);
    if(Buttons.bOverP)
    UpdateButton(hWnd,hDC,IDC_PAUSE,WM_MOUSEMOVE);
    else
    UpdateButton(hWnd,hDC,IDC_PAUSE,NULL);
    if(Buttons.bOverH)
    UpdateButton(hWnd,hDC,IDC_HELP1,WM_MOUSEMOVE);
    else
    UpdateButton(hWnd,hDC,IDC_HELP1,NULL);
    if(Buttons.bOverE)
    UpdateButton(hWnd,hDC,IDC_EXIT1,WM_MOUSEMOVE);
    else
    UpdateButton(hWnd,hDC,IDC_EXIT1,NULL); EndPaint(hWnd,&ps);
    break; case WM_MOUSEMOVE:
    hDC = GetDC(hWnd);
    GetCursorPos(&pt);
    ScreenToClient(hWnd,&pt); if(PtInRect(&Buttons.rcStart,pt))
    {
    if(!Buttons.bOverS)
    {
    Buttons.bOverS = TRUE;
    UpdateButton(hWnd,hDC,IDC_START,WM_MOUSEMOVE);
    if(Buttons.bOverP)
    {
    Buttons.bOverP = FALSE;
    UpdateButton(hWnd,hDC,IDC_PAUSE,NULL);
    ReleaseDC(hWnd,hDC);
    break;
    }
    if(Buttons.bOverH)
    {
    Buttons.bOverH = FALSE;
    UpdateButton(hWnd,hDC,IDC_HELP1,NULL);
    ReleaseDC(hWnd,hDC);
    break;
    }
    if(Buttons.bOverE)
    {
    Buttons.bOverE = FALSE;
    UpdateButton(hWnd,hDC,IDC_EXIT1,NULL);
    ReleaseDC(hWnd,hDC);
    break;
    }
    }
    ReleaseDC(hWnd,hDC);
    break;
    } if(PtInRect(&Buttons.rcPause,pt))
    {
    if(!Buttons.bOverP)
    {
    Buttons.bOverP = TRUE;
    UpdateButton(hWnd,hDC,IDC_PAUSE,WM_MOUSEMOVE);
    if(Buttons.bOverS)
    {
    Buttons.bOverS = FALSE;
    UpdateButton(hWnd,hDC,IDC_START,NULL);
    ReleaseDC(hWnd,hDC);
    break;
    }
    if(Buttons.bOverH)
    {
    Buttons.bOverH = FALSE;
    UpdateButton(hWnd,hDC,IDC_HELP1,NULL);
    ReleaseDC(hWnd,hDC);
    break;
    }
    if(Buttons.bOverE)
    {
    Buttons.bOverE = FALSE;
    UpdateButton(hWnd,hDC,IDC_EXIT1,NULL);
    ReleaseDC(hWnd,hDC);
    break;
    }
    }
    ReleaseDC(hWnd,hDC);
    break;
    } if(PtInRect(&Buttons.rcHelp,pt))
    {
    if(!Buttons.bOverH)
    {
    Buttons.bOverH = TRUE;
    UpdateButton(hWnd,hDC,IDC_HELP1,WM_MOUSEMOVE);
    if(Buttons.bOverS)
    {
    Buttons.bOverS = FALSE;
    UpdateButton(hWnd,hDC,IDC_START,NULL);
    ReleaseDC(hWnd,hDC);
    break;
    }
    if(Buttons.bOverP)
    {
    Buttons.bOverP = FALSE;
    UpdateButton(hWnd,hDC,IDC_PAUSE,NULL);
    ReleaseDC(hWnd,hDC);
    break;
    }
    if(Buttons.bOverE)
    {
    Buttons.bOverE = FALSE;
    UpdateButton(hWnd,hDC,IDC_EXIT1,NULL);
    ReleaseDC(hWnd,hDC);
    break;
    }
    }
    ReleaseDC(hWnd,hDC);
    break;
    } if(PtInRect(&Buttons.rcExit,pt))
    {
    if(!Buttons.bOverE)
    {
    Buttons.bOverE = TRUE;
    UpdateButton(hWnd,hDC,IDC_EXIT1,WM_MOUSEMOVE);
    if(Buttons.bOverS)
    {
    Buttons.bOverS = FALSE;
    UpdateButton(hWnd,hDC,IDC_START,NULL);
    ReleaseDC(hWnd,hDC);
    break;
    }
    if(Buttons.bOverP)
    {
    Buttons.bOverP = FALSE;
    UpdateButton(hWnd,hDC,IDC_PAUSE,NULL);
    ReleaseDC(hWnd,hDC);
    break;
    }
    if(Buttons.bOverH)
    {
    Buttons.bOverH = FALSE;
    UpdateButton(hWnd,hDC,IDC_HELP1,NULL);
    ReleaseDC(hWnd,hDC);
    break;
    }
    }
    ReleaseDC(hWnd,hDC);
    break;
    } if(Buttons.bOverS)
    {
    Buttons.bOverS = FALSE;
    UpdateButton(hWnd,hDC,IDC_START,NULL);
    ReleaseDC(hWnd,hDC);
    break;
    }
    if(Buttons.bOverP)
    {
    Buttons.bOverP = FALSE;
    UpdateButton(hWnd,hDC,IDC_PAUSE,NULL);
    ReleaseDC(hWnd,hDC);
    break;
    }
    if(Buttons.bOverH)
    {
    Buttons.bOverH = FALSE;
    UpdateButton(hWnd,hDC,IDC_HELP1,NULL);
    ReleaseDC(hWnd,hDC);
    break;
    }
    if(Buttons.bOverE)
    {
    Buttons.bOverE = FALSE;
    UpdateButton(hWnd,hDC,IDC_EXIT1,NULL);
    ReleaseDC(hWnd,hDC);
    break;
    } if(hDC)
    ReleaseDC(hWnd,hDC);
    break; case WM_LBUTTONDOWN:
    hDC = GetDC(hWnd);
    GetCursorPos(&pt);
    ScreenToClient(hWnd,&pt); if(PtInRect(&Buttons.rcStart,pt) && Buttons.bOverS)
    {
    UpdateButton(hWnd,hDC,IDC_START,WM_LBUTTONDOWN);
    ReleaseDC(hWnd,hDC);
    break;
    } if(PtInRect(&Buttons.rcPause,pt) && Buttons.bOverP)
    {
    UpdateButton(hWnd,hDC,IDC_PAUSE,WM_LBUTTONDOWN);
    ReleaseDC(hWnd,hDC);
    break;
    } if(PtInRect(&Buttons.rcHelp,pt) && Buttons.bOverH)
    {
    UpdateButton(hWnd,hDC,IDC_HELP1,WM_LBUTTONDOWN);
    ReleaseDC(hWnd,hDC);
    break;
    } if(PtInRect(&Buttons.rcExit,pt) && Buttons.bOverE)
    {
    UpdateButton(hWnd,hDC,IDC_EXIT1,WM_LBUTTONDOWN);
    ReleaseDC(hWnd,hDC);
    break;
    } if(hDC)
    ReleaseDC(hWnd,hDC);
    break; case WM_LBUTTONUP:
    hDC = GetDC(hWnd);
    GetCursorPos(&pt);
    ScreenToClient(hWnd,&pt); if(PtInRect(&Buttons.rcStart,pt) && Buttons.bOverS)
    {
    SendMessage(hWnd,WM_COMMAND,IDC_START,0);
    UpdateButton(hWnd,hDC,IDC_START,WM_LBUTTONUP);
    ReleaseDC(hWnd,hDC);
    break;
    } if(PtInRect(&Buttons.rcPause,pt) && Buttons.bOverP)
    {
    SendMessage(hWnd,WM_COMMAND,IDC_PAUSE,0);
    UpdateButton(hWnd,hDC,IDC_PAUSE,WM_LBUTTONUP);
    ReleaseDC(hWnd,hDC);
    break;
    } if(PtInRect(&Buttons.rcHelp,pt) && Buttons.bOverH)
    {
    SendMessage(hWnd,WM_COMMAND,IDC_HELP1,0);
    UpdateButton(hWnd,hDC,IDC_HELP1,WM_LBUTTONUP);
    ReleaseDC(hWnd,hDC);
    break;
    } if(PtInRect(&Buttons.rcExit,pt) && Buttons.bOverE)
    {
    SendMessage(hWnd,WM_COMMAND,IDC_EXIT1,0);
    UpdateButton(hWnd,hDC,IDC_EXIT1,WM_LBUTTONUP);
    ReleaseDC(hWnd,hDC);
    break;
    } if(hDC)
    ReleaseDC(hWnd,hDC);
    break; case WM_COMMAND:
    switch(wParam)
    {
    case IDC_START:
    MessageBox(hWnd,"开始","测试",MB_OK);
    break; case IDC_PAUSE:
    MessageBox(hWnd,"暂停","测试",MB_OK);
    break; case IDC_HELP1:
    MessageBox(hWnd,"帮助","测试",MB_OK);
    break; case IDC_EXIT1:
    DestroyWindow(hWnd);
    break;
    }
    break; case WM_DESTROY:
    hStartOver = NULL;
    hStartDown = NULL;
    hStartOut = NULL;
    hPauseOver = NULL;
    hPauseDown = NULL;
    hPauseOut = NULL;
    hHelpOver = NULL;
    hHelpDown = NULL;
    hHelpOut = NULL;
    hExitOver = NULL;
    hExitDown = NULL;
    hExitOut = NULL;
    PostQuitMessage(0);
    break; default:
    return DefWindowProc(hWnd,uMsg,wParam,lParam);
       }
       return 0;
    }
      

  12.   

    好了,最后一次: resource.h 和 .rc 文件:)//Microsoft Developer Studio generated resource script.
    //
    #include "resource.h"#define APSTUDIO_READONLY_SYMBOLS
    /////////////////////////////////////////////////////////////////////////////
    //
    // Generated from the TEXTINCLUDE 2 resource.
    //
    #include "afxres.h"/////////////////////////////////////////////////////////////////////////////
    #undef APSTUDIO_READONLY_SYMBOLS/////////////////////////////////////////////////////////////////////////////
    // Chinese (P.R.C.) resources#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
    #ifdef _WIN32
    LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
    #pragma code_page(936)
    #endif //_WIN32#ifdef APSTUDIO_INVOKED
    /////////////////////////////////////////////////////////////////////////////
    //
    // TEXTINCLUDE
    //1 TEXTINCLUDE DISCARDABLE 
    BEGIN
        "resource.h\0"
    END2 TEXTINCLUDE DISCARDABLE 
    BEGIN
        "#include ""afxres.h""\r\n"
        "\0"
    END3 TEXTINCLUDE DISCARDABLE 
    BEGIN
        "\r\n"
        "\0"
    END#endif    // APSTUDIO_INVOKED
    /////////////////////////////////////////////////////////////////////////////
    //
    // Icon
    //// Icon with lowest ID value placed first to ensure application icon
    // remains consistent on all systems.
    IDI_MAINICON            ICON    DISCARDABLE     "Resource\\icon1.ico"/////////////////////////////////////////////////////////////////////////////
    //
    // Bitmap
    //IDB_STAT                BITMAP  DISCARDABLE     "Resource\\Stat.bmp"
    IDB_EXITDOWN            BITMAP  DISCARDABLE     "Resource\\ExitDown.bmp"
    IDB_EXITOUT             BITMAP  DISCARDABLE     "Resource\\ExitOut.bmp"
    IDB_EXITOVER            BITMAP  DISCARDABLE     "Resource\\ExitOver.bmp"
    IDB_HELPDOWN            BITMAP  DISCARDABLE     "Resource\\HelpDown.bmp"
    IDB_HELPOUT             BITMAP  DISCARDABLE     "Resource\\HelpOut.bmp"
    IDB_HELPOVER            BITMAP  DISCARDABLE     "Resource\\HelpOver.bmp"
    IDB_PAUSEDOWN           BITMAP  DISCARDABLE     "Resource\\PauseDown.bmp"
    IDB_PAUSEOUT            BITMAP  DISCARDABLE     "Resource\\PauseOut.bmp"
    IDB_PAUSEOVER           BITMAP  DISCARDABLE     "Resource\\PauseOver.bmp"
    IDB_STARTDOWN           BITMAP  DISCARDABLE     "Resource\\StartDown.bmp"
    IDB_STARTOUT            BITMAP  DISCARDABLE     "Resource\\StartOut.bmp"
    IDB_STARTOVER           BITMAP  DISCARDABLE     "Resource\\StartOver.bmp"
    IDB_KBD                 BITMAP  DISCARDABLE     "Resource\\KBD.bmp"
    IDB_KBDMASK             BITMAP  DISCARDABLE     "Resource\\KBDMask.bmp"
    IDB_LOGO                BITMAP  DISCARDABLE     "Resource\\Logo.bmp"
    IDB_LOGOMASK            BITMAP  DISCARDABLE     "Resource\\LogoMask.bmp"
    #endif    // Chinese (P.R.C.) resources
    /////////////////////////////////////////////////////////////////////////////#ifndef APSTUDIO_INVOKED
    /////////////////////////////////////////////////////////////////////////////
    //
    // Generated from the TEXTINCLUDE 3 resource.
    //
    /////////////////////////////////////////////////////////////////////////////
    #endif    // not APSTUDIO_INVOKED//resource.h
    //{{NO_DEPENDENCIES}}
    // Microsoft Developer Studio generated include file.
    // Used by ChsTest.rc
    //
    #define IDI_ICON1                       101
    #define IDI_MAINICON                    101
    #define IDB_STAT                        102
    #define IDB_EXITDOWN                    103
    #define IDB_EXITOUT                     104
    #define IDB_EXITOVER                    105
    #define IDB_HELPDOWN                    106
    #define IDB_HELPOUT                     107
    #define IDB_HELPOVER                    108
    #define IDB_PAUSEDOWN                   109
    #define IDB_PAUSEOUT                    110
    #define IDB_PAUSEOVER                   111
    #define IDB_STARTDOWN                   112
    #define IDB_STARTOUT                    113
    #define IDB_STARTOVER                   114
    #define IDB_KBD                         115
    #define IDB_KBDMASK                     116
    #define IDD_SETDIALOG                   117
    #define IDB_LOGO                        118
    #define IDB_LOGOMASK                    119
    #define IDC_CHECKBJOMIT                 1000
    #define IDC_RADIOGB                     1002
    #define IDC_RADIOGBK                    1003// Next default values for new objects
    // 
    #ifdef APSTUDIO_INVOKED
    #ifndef APSTUDIO_READONLY_SYMBOLS
    #define _APS_NEXT_RESOURCE_VALUE        120
    #define _APS_NEXT_COMMAND_VALUE         40001
    #define _APS_NEXT_CONTROL_VALUE         1004
    #define _APS_NEXT_SYMED_VALUE           101
    #endif
    #endif
      

  13.   

    to 独行客:我马上测试一下,不过你贴的程序太多,我都不知道自己组合的对不对首先谢谢了to all对热心帮助我的人,我一定会送高分的!!大家放心
      

  14.   

    to 独行客:能给完整代码(可编译)吗? 上面的我无法编译。。[email protected]  拜托了!!!
      

  15.   

    我已经发 EMAIL 给你了,验收吧;)