有時候一個小例子就可以理解MFC。
阿新 • • 發佈:2019-02-08
//#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;
}
//#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;
}