mirror of
https://github.com/apache/nuttx-apps.git
synced 2026-08-01 20:29:00 +00:00
This ports mwdemo.c from Microwindows as a standalone NuttX example application. mwdemo is the primary Win32 API demo in the Microwindows project, featuring 3D graphics, window controls, timer-driven animation, and bitmap image rendering. The demo runs on both qemu-intel64:mw and sim:mw configurations. Signed-off-by: Acfboy <AcfboyU@outlook.com> examples/microwindows: address review, clean up mwdemo. - Replace minimal copyright notice with full Apache 2.0 license header - Use angle brackets for system and microwindows includes - Remove OS-specific dead code (DOS_TURBOC, RTEMS, EMSCRIPTEN/MULTIAPP) - Drop unused demo-mode macros and their corresponding dead code paths (IMAGE, CLIENT3D, CLIPDEMO, ARCDEMO). Keep a fixed GRAPH3D+CONTROLS configuration as the single NuttX demo. - Add g_ prefix to global variable (image -> g_image) - Move demoWndData typedef from mid-file to Private Types section - Merge WinMain body into main() and remove the WinMain indirection - Removed unused images. Signed-off-by: Acfboy <AcfboyU@outlook.com>
101 lines
3 KiB
C
101 lines
3 KiB
C
/****************************************************************************
|
|
* apps/examples/microwindows/mwdemo_main.c
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
* contributor license agreements. See the NOTICE file distributed with
|
|
* this work for additional information regarding copyright ownership. The
|
|
* ASF licenses this file to you under the Apache License, Version 2.0 (the
|
|
* "License"); you may not use this file except in compliance with the
|
|
* License. You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
* License for the specific language governing permissions and limitations
|
|
* under the License.
|
|
*
|
|
****************************************************************************/
|
|
|
|
/****************************************************************************
|
|
* Included Files
|
|
****************************************************************************/
|
|
|
|
#include <nuttx/config.h>
|
|
#include <time.h>
|
|
#include <stdlib.h>
|
|
#include <uni_std.h>
|
|
#include <windows.h>
|
|
|
|
/****************************************************************************
|
|
* Private Data
|
|
****************************************************************************/
|
|
|
|
extern MWIMAGEHDR image_microwin;
|
|
|
|
/****************************************************************************
|
|
* Private Function Prototypes
|
|
****************************************************************************/
|
|
|
|
extern int RegisterAppClass(HINSTANCE hInstance);
|
|
extern HWND CreateAppWindow(void);
|
|
|
|
#define APPCLASS "test"
|
|
#define APPCHILD "test2"
|
|
|
|
/****************************************************************************
|
|
* Public Functions
|
|
****************************************************************************/
|
|
|
|
int main(int argc, FAR char *argv[])
|
|
{
|
|
MSG msg;
|
|
HWND hwnd;
|
|
RECT rc;
|
|
|
|
invoke_WinMain_Start(argc, argv);
|
|
|
|
srandom(time(NULL));
|
|
RegisterAppClass(0);
|
|
GetWindowRect(GetDesktopWindow(), &rc);
|
|
|
|
/* create penguin window */
|
|
|
|
CreateWindowEx(0L, APPCHILD, "",
|
|
WS_BORDER | WS_VISIBLE,
|
|
rc.right - 130 - 1, rc.bottom - 153 - 1,
|
|
130, 153,
|
|
GetDesktopWindow(), (HMENU)1000, NULL, NULL);
|
|
|
|
CreateAppWindow();
|
|
CreateAppWindow();
|
|
CreateAppWindow();
|
|
CreateAppWindow();
|
|
CreateAppWindow();
|
|
CreateAppWindow();
|
|
CreateAppWindow();
|
|
CreateAppWindow();
|
|
|
|
/* set background wallpaper */
|
|
|
|
MwSetDesktopWallpaper(&image_microwin);
|
|
hwnd = CreateAppWindow();
|
|
GetWindowRect(hwnd, &rc);
|
|
OffsetRect(&rc, 50, 50);
|
|
MoveWindow(hwnd, rc.left, rc.top,
|
|
rc.bottom - rc.top,
|
|
rc.right - rc.left, TRUE);
|
|
|
|
while (GetMessage(&msg, NULL, 0, 0))
|
|
{
|
|
TranslateMessage(&msg);
|
|
DispatchMessage(&msg);
|
|
}
|
|
|
|
invoke_WinMain_End();
|
|
|
|
return 0;
|
|
}
|