前言
将代码拆分了一下, 如果处理更多的消息也不怕看的眼花
SDK编程就是对各种Windows消息的处理
实验工程
-
- #include "common.h"
-
- #include "ErrorProc.h"
- #include "WindowProc.h"
-
- int WINAPI WinMain(HINSTANCE hInstance,
- HINSTANCE hPrevInstance,
- LPSTR lpCmdLine,
- int nCmdShow) {
- if (!fnRegisterClass(hInstance, hPrevInstance, lpCmdLine, nCmdShow)) {
- ShowErrMsg();
- goto WINMAIN_END;
- }
-
- if (!fnCreateWindow(hInstance, hPrevInstance, lpCmdLine, nCmdShow)) {
- ShowErrMsg();
- goto WINMAIN_END;
- }
-
- MsgLoop();
-
- WINMAIN_END:
- return 0;
- }
-
- #ifndef COMMON_H_2016_0128
- #define COMMON_H_2016_0128
-
- #define _WIN32_WINDOWS 0x500
-
- #include <windows.h>
- #include <tchar.h>
- #include <stdlib.h>
- #include <stdio.h>
-
- #endif // #ifndef COMMON_H_2016_0128
-
- #ifndef ERRORPROC_H_2016_0128
- #define ERRORPROC_H_2016_0128
-
- const TCHAR* StringFormatV(TCHAR* szFormat, ...);
- void ShowMsg(const TCHAR* pcMsg);
- void ShowErrMsg();
- BOOL isQuitProg(HWND hWnd);
-
- #endif // #ifndef ERRORPROC_H_2016_0128
-
-
- #ifndef WINDOWPROC_H_2016_0128
- #define WINDOWPROC_H_2016_0128
-
- #include "common.h"
-
- BOOL fnRegisterClass(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow);
- BOOL fnCreateWindow(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow);
- void MsgLoop();
- HWND getMainWnd();
- HINSTANCE getInstance();
-
- LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
- LONG fnDispatchMessage(CONST MSG* lpMsg);
- BOOL OnKeyDown(OUT LRESULT& lRc, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
- BOOL OnChar(OUT LRESULT& lRc, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
- BOOL OnSysDeadChar(OUT LRESULT& lRc, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
- BOOL OnSysChar(OUT LRESULT& lRc, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
- BOOL OnSysKeyDown(OUT LRESULT& lRc, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
- BOOL OnSysKeyUp(OUT LRESULT& lRc, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
-
- BOOL OnMouse(OUT LRESULT& lRc, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
- BOOL OnMouseMove(OUT LRESULT& lRc, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
- BOOL OnMouseWheel(OUT LRESULT& lRc, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
- BOOL OnMouseLButtonDown(OUT LRESULT& lRc, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
- BOOL OnMouseLButtonUp(OUT LRESULT& lRc, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
- BOOL OnMouseLButtonDblClk(OUT LRESULT& lRc, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
- BOOL OnMouseRButtonDown(OUT LRESULT& lRc, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
- BOOL OnMouseRButtonUp(OUT LRESULT& lRc, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
- BOOL OnMouseRButtonDblClk(OUT LRESULT& lRc, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
- BOOL OnMouseMButtonDown(OUT LRESULT& lRc, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
- BOOL OnMouseMButtonUp(OUT LRESULT& lRc, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
- BOOL OnMouseMButtonDblClk(OUT LRESULT& lRc, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
-
- BOOL OnClose(OUT LRESULT& lRc, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
- BOOL OnDestory(OUT LRESULT& lRc, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
-
-
-
- #endif // #ifndef WINDOWPROC_H_2016_0128
-
- #include "common.h"
- #include "ErrorProc.h"
- #include "WindowProc.h"
-
- BOOL isQuitProg(HWND hWnd) {
- BOOL bRc = FALSE;
-
- if (IDYES == MessageBox(hWnd, _T("是否退出?"), _T("提示"), MB_YESNO)) {
- bRc = TRUE;
- }
-
- return bRc;
- }
-
- void ShowErrMsg() {
- LPVOID lpMsgBuf = NULL;
-
- FormatMessage(
- FORMAT_MESSAGE_ALLOCATE_BUFFER
- | FORMAT_MESSAGE_FROM_SYSTEM
- | FORMAT_MESSAGE_IGNORE_INSERTS,
- NULL,
- GetLastError(),
- MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
- (LPTSTR)&lpMsgBuf,
- 0,
- NULL);
-
- MessageBox(getMainWnd(), (LPCTSTR)lpMsgBuf, _T("Error"), MB_OK | MB_ICONINFORMATION);
- LocalFree(lpMsgBuf);
- }
-
- const TCHAR* StringFormatV(TCHAR* szFormat, ...)
- {
-
-
- static TCHAR s_cBuf[4096] = {‘\0‘};
- int iStringLen = 0;
- va_list args;
-
- va_start(args, szFormat);
- iStringLen = _vsntprintf(s_cBuf, (sizeof(s_cBuf) / sizeof(TCHAR)) - 1, szFormat, args);
- va_end(args);
-
- return s_cBuf;
- }
-
- void ShowMsg(const TCHAR* pcMsg) {
- if (NULL != pcMsg) {
- OutputDebugString(pcMsg);
- }
- }
-
- #include "WindowProc.h"
- #include "ErrorProc.h"
-
- static HWND g_hWnd = NULL;
- static HINSTANCE g_hInstance = NULL;
-
- HWND getMainWnd() {
- return g_hWnd;
- }
-
- HINSTANCE getInstance() {
- return g_hInstance;
- }
-
- BOOL fnRegisterClass(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
-
- BOOL bRc = TRUE;
- ATOM _atom;
- WNDCLASS WndClass = {0};
-
-
- WndClass.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
- WndClass.lpfnWndProc = &WindowProc;
- WndClass.cbClsExtra = 0;
- WndClass.cbWndExtra = 0;
- WndClass.hInstance = hInstance;
- WndClass.hIcon = NULL;
- WndClass.hCursor = NULL
- WndClass.hbrBackground = (HBRUSH)COLOR_WINDOW;
- WndClass.lpszMenuName = NULL;
- WndClass.lpszClassName = _T("test class");
-
- _atom = RegisterClass(&WndClass);
- if (0 == _atom) {
- bRc = FALSE;
- }
-
- g_hInstance = hInstance;
- return bRc;
- }
-
- BOOL fnCreateWindow(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
-
- BOOL bRc = TRUE;
-
- g_hWnd = CreateWindow(
- _T("test class"),
- _T("test class window"),
- WS_OVERLAPPEDWINDOW,
- 100,
- 100,
- 800,
- 600,
- NULL,
- NULL,
- hInstance,
- NULL
- );
-
- if (NULL == g_hWnd) {
- bRc = FALSE;
- goto FNCREATEWINDOW_END;
- }
-
- ShowMsg(StringFormatV(_T("g_hWnd = 0x%X\n"), g_hWnd));
- ShowWindow(g_hWnd, SW_SHOWNORMAL);
-
- UpdateWindow(g_hWnd);
-
- FNCREATEWINDOW_END:
- return bRc;
- }
-
- void MsgLoop() {
-
- MSG msg;
-
-
-
-
- ShowMsg(_T(">> MsgLoop()\n"));
- while (GetMessage(
- &msg,
- NULL,
- 0,
- 0
- )) {
- TranslateMessage(&msg);
- fnDispatchMessage(&msg);
- }
-
- ShowMsg(_T("<< MsgLoop()\n"));
- }
-
- LONG fnDispatchMessage(CONST MSG* lpMsg) {
- long lRc = 0;
- int iLen = 0;
- TCHAR cBuf[MAXBYTE] = {_T(‘\0‘)};
- WNDCLASS WndClass = {0};
-
- if (NULL == lpMsg)
- goto FNDISPATCHMESSAGE_END;
-
- iLen = GetClassName(lpMsg->hwnd, cBuf, sizeof(cBuf)/sizeof(TCHAR));
- if (iLen <= 0)
- goto FNDISPATCHMESSAGE_END;
-
- if (!GetClassInfo(getInstance(), cBuf, &WndClass))
- goto FNDISPATCHMESSAGE_END;
-
- if (NULL == WndClass.lpfnWndProc)
- goto FNDISPATCHMESSAGE_END;
-
- lRc = WndClass.lpfnWndProc(lpMsg->hwnd, lpMsg->message, lpMsg->wParam, lpMsg->lParam);
-
- FNDISPATCHMESSAGE_END:
- return lRc;
- }
-
- LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
- BOOL bCallDefWindowProc = TRUE;
- LRESULT lRc = 0;
-
- ShowMsg(StringFormatV(_T("uMsg = 0x%X\n"), uMsg));
-
-
-
- switch (uMsg) {
- case WM_KEYDOWN:
- bCallDefWindowProc = OnKeyDown(lRc, hwnd, uMsg, wParam, lParam);
- break;
-
- case WM_CHAR:
- bCallDefWindowProc = OnChar(lRc, hwnd, uMsg, wParam, lParam);
- break;
-
- case WM_SYSDEADCHAR:
- bCallDefWindowProc = OnSysDeadChar(lRc, hwnd, uMsg, wParam, lParam);
- break;
-
- case WM_SYSCHAR:
- bCallDefWindowProc = OnSysChar(lRc, hwnd, uMsg, wParam, lParam);
- break;
-
- case WM_SYSKEYDOWN:
- bCallDefWindowProc = OnSysKeyDown(lRc, hwnd, uMsg, wParam, lParam);
- break;
-
- case WM_SYSKEYUP:
- bCallDefWindowProc = OnSysKeyUp(lRc, hwnd, uMsg, wParam, lParam);
- break;
-
- case WM_MOUSEMOVE:
- case WM_MOUSEWHEEL:
- case WM_LBUTTONDOWN:
- case WM_LBUTTONUP:
- case WM_LBUTTONDBLCLK:
- case WM_RBUTTONDOWN:
- case WM_RBUTTONUP:
- case WM_RBUTTONDBLCLK:
- case WM_MBUTTONDOWN:
- case WM_MBUTTONUP:
- case WM_MBUTTONDBLCLK:
- bCallDefWindowProc = OnMouse(lRc, hwnd, uMsg, wParam, lParam);
- break;
-
- case WM_CLOSE:
- bCallDefWindowProc = OnClose(lRc, hwnd, uMsg, wParam, lParam);
- break;
-
- case WM_DESTROY:
- bCallDefWindowProc = OnDestory(lRc, hwnd, uMsg, wParam, lParam);
- break;
-
- default:
- break;
- }
-
-
-
-
- return bCallDefWindowProc ? DefWindowProc(hwnd, uMsg, wParam, lParam) : lRc;
- }
-
- BOOL OnKeyDown(OUT LRESULT& lRc, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
-
-
-
- ShowMsg(_T("OnKeyDown\n"));
-
- int nVirtKey = (int) wParam;
- ULONG ulKeyData = lParam;
- BYTE ucKeyState[256] = {0};
- WORD wChar = 0;
- int iRc = 0;
-
-
- if (!GetKeyboardState(&ucKeyState[0])) {
- goto ONKEYDOWN_END;
- }
-
- if (ToAscii(nVirtKey, (ulKeyData >> 16) & 0xff, ucKeyState, &wChar, 0) <= 0) {
- goto ONKEYDOWN_END;
- }
-
- ShowMsg(StringFormatV(_T("%c "), (TCHAR)wChar));
-
- ONKEYDOWN_END:
- lRc = 0;
- return TRUE;
- }
-
- BOOL OnChar(OUT LRESULT& lRc, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
- ShowMsg(StringFormatV(_T("%c "), (TCHAR)wParam));
- lRc = 0;
- return TRUE;
- }
-
- BOOL OnSysDeadChar(OUT LRESULT& lRc, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
- lRc = 0;
- return TRUE;
- }
-
- BOOL OnSysChar(OUT LRESULT& lRc, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
- lRc = 0;
- return TRUE;
- }
-
- BOOL OnSysKeyDown(OUT LRESULT& lRc, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
-
- lRc = 0;
- return TRUE;
- }
-
- BOOL OnSysKeyUp(OUT LRESULT& lRc, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
-
- lRc = 0;
- return TRUE;
- }
-
- BOOL OnMouse(OUT LRESULT& lRc, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
- BOOL bRc = FALSE;
-
- if ((uMsg < WM_MOUSEFIRST) || (uMsg > WM_MOUSELAST))
- goto ONMOUSE_END;
-
-
-
- switch (uMsg) {
-
- case WM_MOUSEMOVE:
- bRc = OnMouseMove(lRc, hwnd, uMsg, wParam, lParam);
- break;
-
-
- case WM_MOUSEWHEEL:
- bRc = OnMouseWheel(lRc, hwnd, uMsg, wParam, lParam);
- break;
-
-
- case WM_LBUTTONDOWN:
- bRc = OnMouseLButtonDown(lRc, hwnd, uMsg, wParam, lParam);
- break;
-
- case WM_LBUTTONUP:
- bRc = OnMouseLButtonUp(lRc, hwnd, uMsg, wParam, lParam);
- break;
-
- case WM_LBUTTONDBLCLK:
- bRc = OnMouseLButtonDblClk(lRc, hwnd, uMsg, wParam, lParam);
- break;
-
-
- case WM_RBUTTONDOWN:
- bRc = OnMouseRButtonDown(lRc, hwnd, uMsg, wParam, lParam);
- break;
-
- case WM_RBUTTONUP:
- bRc = OnMouseRButtonUp(lRc, hwnd, uMsg, wParam, lParam);
- break;
-
- case WM_RBUTTONDBLCLK:
- bRc = OnMouseRButtonDblClk(lRc, hwnd, uMsg, wParam, lParam);
- break;
-
-
- case WM_MBUTTONDOWN:
- bRc = OnMouseMButtonDown(lRc, hwnd, uMsg, wParam, lParam);
- break;
-
- case WM_MBUTTONUP:
- bRc = OnMouseMButtonUp(lRc, hwnd, uMsg, wParam, lParam);
- break;
-
- case WM_MBUTTONDBLCLK:
- bRc = OnMouseMButtonDblClk(lRc, hwnd, uMsg, wParam, lParam);
- break;
-
- default:
- break;
- }
-
- ONMOUSE_END:
- lRc = 0;
- return bRc;
- }
-
- BOOL OnMouseMove(OUT LRESULT& lRc, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
- lRc = 0;
- return TRUE;
- }
-
- BOOL OnMouseWheel(OUT LRESULT& lRc, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
- lRc = 0;
- return TRUE;
- }
-
- BOOL OnMouseLButtonDown(OUT LRESULT& lRc, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
- ShowMsg(StringFormatV(_T("OnMouseLButtonDown, hwnd = 0x%X\n"), hwnd));
-
- lRc = 0;
- return TRUE;
- }
-
- BOOL OnMouseLButtonUp(OUT LRESULT& lRc, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
- ShowMsg(StringFormatV(_T("OnMouseLButtonUp, hwnd = 0x%X\n"), hwnd));
- lRc = 0;
- return TRUE;
- }
-
- BOOL OnMouseLButtonDblClk(OUT LRESULT& lRc, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
- ShowMsg(_T("OnMouseLButtonDblClk\n"));
- lRc = 0;
- return TRUE;
- }
-
- BOOL OnMouseRButtonDown(OUT LRESULT& lRc, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
- lRc = 0;
- return TRUE;
- }
-
- BOOL OnMouseRButtonUp(OUT LRESULT& lRc, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
- lRc = 0;
- return TRUE;
- }
-
- BOOL OnMouseRButtonDblClk(OUT LRESULT& lRc, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
- lRc = 0;
- return TRUE;
- }
-
- BOOL OnMouseMButtonDown(OUT LRESULT& lRc, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
- lRc = 0;
- return TRUE;
- }
-
- BOOL OnMouseMButtonUp(OUT LRESULT& lRc, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
- lRc = 0;
- return TRUE;
- }
-
- BOOL OnMouseMButtonDblClk(OUT LRESULT& lRc, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
- lRc = 0;
- return TRUE;
- }
-
- BOOL OnClose(OUT LRESULT& lRc, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
- lRc = 0;
- return isQuitProg(hwnd);
- }
-
- BOOL OnDestory(OUT LRESULT& lRc, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
- lRc = 0;
-
-
- PostQuitMessage(0);
-
- return TRUE;
- }
http://blog.csdn.net/lostspeed/article/details/50606215
http://blog.csdn.net/lostspeed/article/details/50614423
SDK Hello world(直接使用SDK封装)
原文:http://www.cnblogs.com/findumars/p/5174330.html