码迷,mamicode.com
首页 > 其他好文 > 详细

UI(一)

时间:2018-11-13 16:10:18      阅读:332      评论:0      收藏:0      [点我收藏+]

标签:路径   tst   trre   地址   htm   aik   details   17.   最大   

1.AfxWinMain

首先,MFC程序先执行到TheApp实例化对象也就是通过这句CTestApp the App来实例化对象的
然后,调用CTestApp构造函数分配内存空间

然后,就调用了AfxWinMain函数(这个是MFC/SRC下的源码,安装软件后电脑上会有,跟踪也会跟踪的到)
然后,AfxWinMain指向AfxWinInit()函数
然后,AfxWinMain执行InitApplication,这个地方InitApplication是虚函数,调用的是CWinApp::InitApplication
然后,AfxWinMain指向InitInstance,在这里面调用了CTestFrameWnd的构造函数,产生了主窗口
然后,显示窗口,更新窗口发送标准消息WM_PAINT
最后回到AfxWinMain,执行run函数,进入消息循环

参考:https://zhidao.baidu.com/question/321228915.html

2.  参见:https://zhidao.baidu.com/question/421099954.html?qbl=relate_question_0&word=lpCmdLine

extern int AFXAPI AfxWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
_In_ LPTSTR lpCmdLine, int nCmdShow);

其中各个参数:

HINSTANCE hInstance,  HINSTANCE 是“句柄型”数据类型。相当于装入到了内存的资源的ID。HINSTANCE对应的资源是instance.句柄实际上是一个 无符号长整数。

 HINSTANCE hPrevInstance

 LPTSTR lpCmdLine    表示指向字符/字符串的指针

L表示long指针,这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32位操作系统中, long指针和near指针及far修饰符都是为了兼容的作用,没有实际意义。即win32中,long,near,far指针与普通指针没有区别,LP与P是等效的。
P表示这是一个指针。
T表示_T宏,这个宏用来表示你的字符是否使用UNICODE, 如果你的程序定义了UNICODE或者其他相关的宏,那么这个字符或者字符串将被作为UNICODE字符串,否则就是标准的ANSI字符串。
STR表示这个变量是一个字符串。
C表示是一个常量,const。
 

int nCmdShow  nCmdShow:指定窗口如何显示。如果发送应用程序的程序提供了STARTUPINFO结构,则应用程序第一次调用ShowWindow时该参数被忽略。否则,在第一次调用ShowWindow函数时,该值应为在函数WinMain中nCmdShow参数。

更多内容参见:https://zhidao.baidu.com/question/206037460.html

3.CWinThread

CWinThread类是MFC用来封装线程的,包括UI线程和工作者线程。因此每个MFC程序至少使用一个CWinThread派生类。被MFC程序员熟知的CWinApp应用类就从这里派生。

参见:https://baike.baidu.com/item/CWinThread/5902501?fr=aladdin

4.CWinApp  是从 CWinThread 派生的,后者表示可能具有一个或多个线程的应用程序的主执行线程。

 

5.对应的:AfxGetThread函数与AfxGetApp函数

AfxGetApp是取前theApp的指针。
AfxGetThread是返回的是当前界面线程对象的指针,指得当前线程指针,如果在多线程时调用AfxGetThread返回的与AfxGetApp并不一定相同。

6.AfxWinInit

参数

  BOOL AFXAPI AfxWinInit(
   HINSTANCE hInstance,
   HINSTANCE hPrevInstance,
   LPTSTR lpCmdLine,
   int nCmdShow 
);
7.InitApplication  //用于初始化代码
BOOL CWinApp::InitApplication()
{
    if (CDocManager::pStaticDocManager != NULL)
    {
        if (m_pDocManager == NULL)
            m_pDocManager = CDocManager::pStaticDocManager;
        CDocManager::pStaticDocManager = NULL;
    }
 
    if (m_pDocManager != NULL)
        m_pDocManager->AddDocTemplate(NULL);
    else
        CDocManager::bStaticInit = FALSE;
 
    LoadSysPolicies();
 
    return TRUE;
}

8.InitInstance  线程初始化

进入程序,InitInstance是虚函数,继承类必须提供它的实现代码。完成整个消息链的启动。

CWinApp这个类中除了有一般类都有的构造函数,一个重要的成员函数就是InitInstance,我们知道,在WINDOWS环境下面可以运行同一程序的多个实例,函数InitInstance的作用就是在生成的一个新的实例的时候,完成一些初始化的工作。

Windows允许在同一时刻运行程序的几份拷贝。在概念上,应用程序的初始化可以被分为两个部分:一次性的应用程序初始化工作,这些在应用程序第一次运行时完成,以及实例的初始化工作,每次运行程序的一个拷贝时都会执行这些操作,包括第一次运行时。框架中WinMain实现调用这个函数。重载InitInstance以初始化在Windows下运行的应用程序的每个新实例。

通常,重载InitInstance以构造主窗口对象并设置CWinThread::m_pMainWnd数据成员,使其指向这个窗口。

参见:https://blog.csdn.net/beyondhaven/article/details/6018864

9.CWinAppEx类

CWinAppEx处理应用程序状态、 将状态保存到注册表、 从注册表加载此状态,初始化应用程序管理器,并提供到同样的应用程序管理器链接。

class CWinAppEx : public CWinApp  

 参见:https://msdn.microsoft.com/zh-cn/library/bb983877.aspx

10.GetModuleFileName

获取当前进程已加载模块的文件的完整路径,该模块必须由当前进程加载。
如果想要获取另一个已加载模块的文件路径,可以使用GetModuleFileNameEx函数。
DWORD WINAPI GetModuleFileName(
    _In_opt_  HMODULE hModule,
    _Out_     LPTSTR lpFilename,
    _In_      DWORD nSize
);
hModule Long
一个模块的句柄。可以是一个DLL模块,或者是一个应用程序的实例句柄。如果该参数为NULL,
该函数返回该应用程序全路径。
lpFileName String
指定一个字串缓冲区,要在其中容纳文件的用NULL字符中止的路径名,hModule模块就是从这个文件装载进来的
nSize Long
装载到缓冲区lpFileName的最大字符数量
参见百度百科。
11.GetBufferSetLength
申请一个指定长度的空间
12.ReleaseBuffer
GetBuffer()主要作用是将字符串的缓冲区长度锁定,releaseBuffer则是解除锁定,使得CString对象在以后的代码中继续可以实现长度自适应增长的功能。
ReleaseBuffer作用,就是更新字符串的长度。
13.GetLength
返回值:返回字符串中的字节计数。
此成员函数用来获取这个CString对象中的字节计数。这个计数不包括结尾的空字符。
14.VRS与UI中基站信息数据处理异同
VRS:
技术分享图片

UI:

技术分享图片

15.AfxOleInit  // 初始化 OLE 库

OLE,Object Linking and Embedding,对象连接与嵌入,简称OLE技术。OLE 不仅是桌面应用程序集成,而且还定义和实现了一种允许应用程序作为软件“对象”(数据集合和操作数据的函数)彼此进行“连接”的机制,这种连接机制和协议称为组件对象模型(COM)。

ole是对象链接嵌入技术的缩写。允许你在程序中嵌入别的程序的文档(此时你的程序成为容器),或者别的程序嵌入你的程序的文档(此时你的程序成为服务器)
你的程序完成ole的初始化,之所以有,是你创建mfc项目的时候勾选了ole的支持。

 同一个进程,只能调用一次AfxOleInit,不能调用第二次,多次调用必然失败。
一般来说,推荐在程序入口函数中调用AfxOleInit,调用之后,你封装的类无需再调用AfxOleInit。
可以尝试用AfxOleGetMessageFilter() != NULL判断OLE是否初始化
 
 16.INITCOMMONCONTROLSEX
typedef struct tagINITCOMMONCONTROLSEX {
    DWORD dwSize;             // size of this structure
    DWORD dwICC;              // flags indicating which classes to be initialized
} INITCOMMONCONTROLSEX, *LPINITCOMMONCONTROLSEX;

DWORD  DWORD全称Double Word,是指注册表的键值,每个word为2个字节的长度,DWORD 双字即为4个字节,每个字节是8位,共32位。

// 如果一个运行在 Windows XP 上的应用程序清单指定要
// 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,
//则需要 InitCommonControlsEx()。否则,将无法创建窗口。

17.ICC_WIN95_CLASSES  注册InitCommonControls函数注册的所有类。
    // 将它设置为包括所有要在应用程序中使用的
    // 公共控件类。
    InitCtrls.dwICC = ICC_WIN95_CLASSES;

18.CWinAppEx::InitInstance();  CWinAppEx继承于WinApp,故可以使用WinApp中的函数,此函数意思为:Windows允许同一个程序的多个副本同时运行。

virtual BOOL InitInstance( );

非零,如果初始化成功;否则为0。

 

此条目后面可以不看

InitLibId  CAtlModuleT::InitLibId 初始化包含当前模块的GUID的数据成员

LoadAppLangResourceDLL  

    virtual HINSTANCE LoadAppLangResourceDLL();

Handle 是代表系统的内核对象,如文件句柄,线程句柄,进程句柄。
HMODULE 是代表应用程序载入的模块,win32系统下通常是被载入模块的线性地址。
HINSTANCE 在win32下与HMODULE是相同的东西,在Win32下还存在主要是因为win16
程序使用HINSTANCE来区别task。

AfxSetResourceHandle(目前程序不会调用)  AfxGetResourceHandle用于获取当前资源模块句柄,而AfxSetResourceHandle则用于设置程序目前要使用的资源模块句柄。

SupportsRestartManager  确定应用程序是否支持重新启动管理器。

返回值
TRUE 指示应用程序支持重新启动管理器; FALSE 指示应用程序不。
    // Register the application with the Restart Manager, if supported.
    if (SupportsRestartManager())
    {
        RegisterWithRestartManager(SupportsApplicationRecovery(), _T(""));
    }

RegisterWithRestartManager  注册重新启动管理器的应用程序。

virtual HRESULT RegisterWithRestartManager(
   BOOL bRegisterRecoveryCallback,
   const CString &strRestartIdentifier
);

bRegisterRecoveryCallback

TRUE 指示应用程序的此实例使用还原回调函数; FALSE 指示它不。在应用程序意外退出时,框架调用还原回调函数。有关更多信息,请参见 CWinApp::ApplicationRecoveryCallback

[in] strRestartIdentifier

标识重新启动管理器的此实例的唯一字符串。重新启动管理器标识符用于应用程序的每个实例都是唯一的。

参见:https://msdn.microsoft.com/zh-cn/library/dd394274.aspx

SupportsApplicationRecovery  确定重新启动管理器是恢复意外退出的应用程序。

语法
virtual BOOL SupportsApplicationRecovery() const;
返回值
TRUE 指示重新启动管理器恢复应用程序; FALSE 指示重新启动管理器不。

 

19.

 

UI(一)

标签:路径   tst   trre   地址   htm   aik   details   17.   最大   

原文地址:https://www.cnblogs.com/liuliwei-leo/p/9952416.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!