void InitCreateInfo(PMAINWINCREATE pCreateInfo)
{
pCreateInfo->dwStyle = WS_THICKFRAME;
pCreateInfo->spCaption = "The first main window" ;
pCreateInfo->hMenu = 0;
pCreateInfo->hCursor = GetSystemCursor(2);
pCreateInfo->hIcon = LoadIconFromFile("res/table.ico");
pCreateInfo->MainWindowProc = TestMainWinProc;
pCreateInfo->lx = 50;
pCreateInfo->ty = 50;
pCreateInfo->rx = 300;
pCreateInfo->by = 480;
pCreateInfo->iBkColor = COLOR_lightwhite;
pCreateInfo->dwAddData1 = 0;
pCreateInfo->dwAddData2 = 0;
}
void* TestWindowMain(void* data)
{
MSG Msg;
MAINWINCREATE CreateInfo;
HWND hMainWnd;
InitCreateInfo(&CreateInfo);
if( !(hMainWnd = CreateMainWindow(&CreateInfo)) )
return NULL;
ShowWindow(hMainWnd, SW_SHOWNORMAL);
while( GetMessage(&Msg, hMainWnd) ) {
DispatchMessage(&Msg);
}
MainWindowThreadCleanup(hMainWnd);
return NULL;
}
在上面的代码段中,该线程首先调用 CreateMainWindow 建立了主窗口,然后调用
ShowWindow 显示了主窗口,最后启动了消息循环。当消息循环因为接收到 MSG_QUIT
消息而终止时,该函数调用了 MainWindowThreadCleanup 清除了相关的线程数据。
从上述代码中可看出主函数不支持窗口类,在调用 CreateMainWindow 函数时直接指
定主窗口的窗口过程地址。我们也可以从中看到主窗口所支持的其他属性:
1.窗口风格。表 2.1 给出了所支持的窗口风格
表 2.1 MiniGUI 支持的主窗口风格
风格 描述
WS_BORDER
创建一个具有单线边框的窗口
WS_THICKFRAME
创建一个具有宽边框的窗口
WS_THINFRAME
创建一个具有细边框的窗口
WS_CAPTION
创建一个具有标题栏的窗口
WS_HSCROLL
创建一个具有水平滚动条的窗口
WS_MAXMIZEBOX
创建一个具有最大化框的窗口
WS_MINIMIZEBOX
创建一个具有最小化框的窗口
WS_SYSMENU
创建一个具有系统菜单的窗口
WS_VSCROLL
创建一个具有垂直滚动条的窗口