21xrx.com
2025-04-02 04:40:02 Wednesday
文章检索 我的文章 写文章
用 DevC++ 制作生日蛋糕
2023-06-26 18:45:06 深夜i     17     0
DevC++ 生日蛋糕 制作

在程序员们的日常生活中,电脑与编程常常是离不开的一部分。但是你是否想过,使用电脑来制作一份生日蛋糕呢?今天,我们就来介绍一款在 DevC++ 中制作生日蛋糕的方法。

首先,打开 DevC++ ,新建一个项目并选择 “Win32 GUI 应用程序”。

接着,在项目文件夹中创建一个名为 “cake.bmp”的位图文件,并将其添加到项目资源中。然后,在主程序中加入以下代码:

#include <windows.h>
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
char szClassName[ ] = "WindowsApp";
int WINAPI WinMain (HINSTANCE hThisInstance,
          HINSTANCE hPrevInstance,
          LPSTR lpszArgument,
          int nCmdShow)
{
  HWND hwnd;
  MSG messages;
  WNDCLASSEX wincl;
  wincl.hInstance = hThisInstance;
  wincl.lpszClassName = szClassName;
  wincl.lpfnWndProc = WindowProcedure;
  wincl.style = CS_DBLCLKS;
  wincl.cbSize = sizeof (WNDCLASSEX);
  wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
  wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
  wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
  wincl.lpszMenuName = NULL;
  wincl.cbClsExtra = 0;
  wincl.cbWndExtra = 0;
  wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
  if (!RegisterClassEx (&wincl))
    return 0;
  hwnd = CreateWindowEx (
      0,
      szClassName,
      "Birthday Cake",
      WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT,
      CW_USEDEFAULT,
      640,
      480,
      HWND_DESKTOP,
      NULL,
      hThisInstance,
      NULL
      );
  ShowWindow (hwnd, nCmdShow);
  while (GetMessage (&messages, NULL, 0, 0))
  {
    TranslateMessage(&messages);
    DispatchMessage(&messages);
  }
  return messages.wParam;
}
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
  switch (message)
  {
    case WM_PAINT:
    {
      PAINTSTRUCT ps;
      HDC hdc = BeginPaint(hwnd, &ps);
      HBITMAP hBitmap = (HBITMAP) LoadImage(NULL, "cake.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
      HDC hdcMem = CreateCompatibleDC(hdc);
      HGDIOBJ hOld = SelectObject(hdcMem, hBitmap);
      BITMAP bm;
      GetObject(hBitmap, sizeof(BITMAP), &bm);
      BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCCOPY);
      SelectObject(hdcMem, hOld);
      DeleteObject(hBitmap);
      DeleteDC(hdcMem);
      EndPaint(hwnd, &ps);
      break;
    }
    case WM_DESTROY:
      PostQuitMessage (0);
      break;
    default:
      return DefWindowProc (hwnd, message, wParam, lParam);
  }
  return 0;
}

这段代码定义了一个基于 Windows 应用程序的窗口,并将位图文件加载到窗口中展示。

其中,通过 `LoadImage()` 函数在后台载入了位图,接着使用 `CreateCompatibleDC()` 函数创建一个内存显示器 DC,以及使用 `SelectObject()` 函数将 DC 与位图进行关联。之后,使用 `BitBlt()` 函数将内存 DC 的内容绘制到主 DC 上,并在绘制完成后将内存显示器 DC 与位图对象分离。最后,在退出程序之前要记得清除并删除掉不再使用的资源。

现在,你可以运行程序,生日蛋糕就会在你的屏幕上展现出来。当然,你也可以尝试添加一些特殊的效果,例如动画(做成一个闪烁的生日蜡烛)、音效等,来为生日孩子带来惊喜。

总之,使用 DevC++ 制作生日蛋糕,不仅富有创意的设计证明了软件开发的多样性,也为你和你的家人、朋友带来了不一样的生日庆祝方式。

  
  

评论区