WIN32 窗口类封装 框架实现部分

上面已经讲了窗口封装部分,内容可点击:http://www.cnblogs.com/mengdejun/p/4010320.html,下面分享框架部分内容,完成WINDOWS消息迭代

CQFrameWnd.h 框架部分定义

// MainFrameWnd.h: interface for the CMainFrameWnd class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_MAINFRAMEWND_H__F8E32324_0D71_4EEA_9B91_76CA47D6423F__INCLUDED_)
#define AFX_MAINFRAMEWND_H__F8E32324_0D71_4EEA_9B91_76CA47D6423F__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "QWnd.h"
#include "qbutton.h"

class CQFrameWnd : public CQWnd{
    QWND_DECLARE_MESSAGE_MAP(CQFrameWnd)
public:
    CQFrameWnd();
    virtual ~CQFrameWnd();
    BOOL OnLButtonDown(UINT uMsg,WPARAM wParam,LPARAM lParam);
    BOOL OnRButtonDown(UINT uMsg,WPARAM wParam,LPARAM lParam);
    virtual HRESULT OnCreate(UINT uMsg,WPARAM wParam, LPARAM lParam);
    virtual HRESULT OnNcCreate(UINT uMsg,WPARAM wParam, LPARAM lParam);
public:
    CQButton m_btn;
};

#endif // !defined(AFX_MAINFRAMEWND_H__F8E32324_0D71_4EEA_9B91_76CA47D6423F__INCLUDED_)

CQFrameWnd.cpp 框架部分实现

// QWApp.cpp: implementation of the CQWApp class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "QWApp.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CQWApp::CQWApp()
{

}

CQWApp::~CQWApp()
{

}

BOOL CQWApp::InitInstance()
{
    return TRUE;
}

BOOL CQWApp::ExitInstance()
{
    return TRUE;
}

BOOL CQWApp::Run(){
    MSG msg;
    while(GetMessage(&msg,NULL,0,0)){ 
        //从消息队列中取得消息
        TranslateMessage(&msg);
        //检索并生成字符消息WM_CHAR
        DispatchMessage(&msg);
        //将消息发送给相应的窗口函数
    }
    return TRUE;
}

 实现及其调用过程

// HelloApp.h: interface for the CHelloApp class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_HELLOAPP_H__53E2DA06_2C68_41AD_AF58_3A9111E27DB7__INCLUDED_)
#define AFX_HELLOAPP_H__53E2DA06_2C68_41AD_AF58_3A9111E27DB7__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "QWApp.h"

class CHelloApp : public CQWApp  
{
public:
    CHelloApp();
    virtual ~CHelloApp();
    virtual BOOL ExitInstance();
    virtual BOOL InitInstance();

};
#endif // !defined(AFX_HELLOAPP_H__53E2DA06_2C68_41AD_AF58_3A9111E27DB7__INCLUDED_)
// HelloApp.cpp: implementation of the CHelloApp class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "HelloApp.h"
#include "QFrameWnd.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CHelloApp::CHelloApp(){
}

CHelloApp::~CHelloApp(){
}


BOOL CHelloApp::ExitInstance(){
    if(m_pMainWnd)
        delete m_pMainWnd;
    return TRUE;
}

BOOL CHelloApp::InitInstance(){
    CQFrameWnd* pW=new CQFrameWnd;
    if(pW->CreateEx(0,TEXT("test c++ frame"),TEXT("Visual Keyboard"),WS_OVERLAPPEDWINDOW|WS_VISIBLE,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,(HINSTANCE)GetModuleHandle(NULL))){
        m_pMainWnd=(LPVOID)pW;
        pW->UpdateWindow();
        pW->ShowWindow(SW_SHOWNORMAL);
        return TRUE;
    }
    return FALSE;
}
#include "stdafx.h"
#include "HelloApp.h"
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
    CHelloApp app;
    if(app.InitInstance()){
        app.Run();
        app.ExitInstance();
    }
    return 0;
}

windows开发框架

动态链接库版本:http://files.cnblogs.com/mengdejun/wd.zip

1.0.0.3修复版本:http://files.cnblogs.com/mengdejun/wd.fix.zip

原文地址:https://www.cnblogs.com/mengdejun/p/4013132.html