有时候一个小例子就可以理解MFC。

//#ifdef _WIN32_WINNT
//#undef _WIN32_WINNT
#define _WIN32_WINNT 0x0500
//#endif


#include <windows.h>
#include <stdio.h>
//#if (_WIN32_WINNT >= 0x0500)
#define TIMER_ONE_SECOND  500
#define RED_LAMP_TIMER    1


/*窗体过程处理函数的声明*/
LRESULT CALLBACK WinProc(
                            HWND hwand,        // handle to window
                            UINT uMsg,         // message identifier
                            WPARAM wParam,     // first message parameter
                            LPARAM lParam      // second message parameter
                            );


int WINAPI WinMain
(
    HINSTANCE hInstance,       // handle to current instance
    HINSTANCE hPrevInstance,   // handle to previous instance
    LPSTR lpCmdLine,           // command line
    int nCmdShow               // show state
 )
{
    static TCHAR szAppName[] = "WinClassName";


    //第一步骤:窗体类设计
//design a window class
    WNDCLASS wndclass;
    HWND hwnd;
    MSG msg;


    wndclass.cbClsExtra = 0;
    wndclass.cbWndExtra = 0;
    wndclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
    wndclass.hCursor = LoadCursor(NULL,IDC_CROSS);
    wndclass.hIcon = LoadIcon(NULL,IDI_ERROR);
    wndclass.hInstance = hInstance;
    wndclass.lpfnWndProc = WinProc;
    wndclass.lpszClassName = szAppName;
    wndclass.lpszMenuName = NULL;
    wndclass.style = CS_HREDRAW | CS_VREDRAW;
    //窗体类注册
    RegisterClass(&wndclass);
 
//第二步骤:窗体显示
    hwnd = CreateWindow(szAppName,"Windows Example",WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL);
    ShowWindow( hwnd,SW_SHOWNORMAL );
    UpdateWindow( hwnd );
    SetTimer(hwnd,RED_LAMP_TIMER,500,NULL);
    
//第三步骤:消息循环
    //define message
    while( GetMessage( &msg, NULL, 0, 0))
    {
        TranslateMessage( &msg );
        DispatchMessage( &msg );
    }
    return msg.wParam;
}


LRESULT CALLBACK WinProc(
                            HWND hWnd,       // handle to window
                            UINT uMsg,       // message identifier
                            WPARAM wParam,   // first mesage parameter
                            LPARAM lParam    // second message parameter
                            )
{
    HDC hDC;
    PAINTSTRUCT ps;
 //   int n = 5;
    char szChar[20];
    static BOOL bLight = TRUE;
    int nPosX = 20;
    int nPosY = 50;
    int nRad = 20;
    HBRUSH obj;
    HBRUSH OldObj;
    RECT rect;

    switch( uMsg )
    {
   case WM_TIMER:
        bLight = !bLight;
      //  GetClientRect(hWnd,&rect);
GetWindowRect(hWnd,&rect); 
        InvalidateRect(hWnd, NULL, TRUE);

        break;
 
   case WM_PAINT:
        hDC = BeginPaint( hWnd, &ps );
        TextOut( hDC, 0, 0, "Windows Example", strlen("Windows Example"));
        if(bLight)
        {

            //obj = (HBRUSH)GetStockObject(GRAY_BRUSH);
            SelectObject(hDC,GetStockObject(DC_BRUSH));
            SetDCBrushColor(hDC,RGB(0x00,0xff,0x00));
            //OldObj = SelectObject(hDC, obj);
            Ellipse(hDC,nPosX-nRad,nPosY-nRad,nPosX+nRad,nPosY+nRad);
        }
        else
        {
            obj = (HBRUSH)GetStockObject(BLACK_BRUSH);
            OldObj = SelectObject(hDC, obj);
            Ellipse(hDC,nPosX-nRad,nPosY-nRad,nPosX+nRad,nPosY+nRad);

        }
SelectObject(hDC, OldObj);

        EndPaint(hWnd,&ps);
        break;
    case WM_CHAR:
{
        sprintf( szChar, "char code is %d", wParam);
        MessageBox( hWnd, szChar, "char", 0 );
        break;
}
    case WM_LBUTTONDOWN:
        MessageBox( hWnd, "mouse clicked", "message", 0);
break;


    case WM_CLOSE:
        if( IDYES == MessageBox(hWnd, "Do you really want to exit this program [y/n]?","message", MB_YESNO) )
        {
            DestroyWindow( hWnd );
        }
        break;
 
    case WM_DESTROY:
        PostQuitMessage( 0 );
    default:
        return DefWindowProc( hWnd, uMsg, wParam, lParam );
;
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值