用win32程序巧妙的画心及初写win32程序的相关问题

  

大家好,这是本人写的第一篇博客,如果没能让你有所收获还望见谅,有何错误还望批评,下面回到正题

1.作为win32初学者如何让自己写的程序,能在无编译器的电脑运行?

想必大家肯定经历过将程序放到别人电脑上,会出现.dll库文件缺失的情况,那么该如何解决呢?

首先确保你的程序版本是Release版本,然后你需要将项目属性改成如下情况

代码生成中的运行库选择多线程(/MT)

下面贴代码

#include<windows.h>
#include<math.h>
#include"resource.h"
#define Radius 30*sqrt(2)/2
LRESULT CALLBACK WinProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hInprestance, PSTR pCmdLine, int iCmdLine)
{
    WNDCLASS wndcls;
    wndcls.cbWndExtra = 0;
    wndcls.cbClsExtra = 0;
    wndcls.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wndcls.hInstance = hInstance;
    wndcls.hCursor = LoadCursor(NULL, IDC_ARROW);
    wndcls.hIcon = LoadIcon(hInstance, (LPSTR)IDI_ICON1);
    wndcls.lpfnWndProc = WinProc;
    wndcls.lpszClassName = TEXT("WinForm");
    wndcls.lpszMenuName = NULL;
    wndcls.style = CS_VREDRAW | CS_HREDRAW;
    RegisterClass(&wndcls);
    HWND hwnd;
    hwnd = CreateWindow("WinForm", "Marco", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
    ShowWindow(hwnd, iCmdLine);
    UpdateWindow(hwnd);
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return 0;
}
void DrawHeart(HDC hdc,int i,int cxClient,int cyClient)
{
    //使改变窗口心自动调整改变
    SetMapMode(hdc, MM_ISOTROPIC);
    SetWindowExtEx(hdc, 120, 90, NULL);
    SetViewportExtEx(hdc, cxClient, cyClient, NULL);
    SetWindowOrgEx(hdc, 80, 75, NULL);
    SetViewportOrgEx(hdc, cxClient / 2, cyClient / 2, NULL);
    POINT pt[4] = { 50,80,80,50,110,80,80,110 };
    HPEN hpen[4];
    HBRUSH hbrush[4];
    COLORREF color[4] = { RGB(255,0,255),RGB(0,0,255),RGB(255,0,0),RGB(0,0,0) };
    for (int j = 0; j < 4; j++)
    {
        hpen[j] = CreatePen(PS_SOLID, 0, color[j]);
        hbrush[j] = CreateSolidBrush(color[j]);
    }
    SelectObject(hdc, hpen[i]);
    SelectObject(hdc, hbrush[i]);
    Polygon(hdc, pt, 4);
    Ellipse(hdc, 65 - Radius, 65 - Radius, 65 + Radius, 65 + Radius);
    Ellipse(hdc, 95 - Radius, 65 - Radius, 95 + Radius, 65 + Radius);
    DeleteObject(hpen[i]);
    DeleteObject(hbrush[i]);
}
LRESULT CALLBACK WinProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HDC hdc;
    PAINTSTRUCT ps;
    COLORREF color[4] = { RGB(255,0,255),RGB(0,0,255),RGB(255,0,0),RGB(255,255,255) };
    static HWND hwndstatic;
    static int cxClient, cyClient;
    static int i;
    int j;
    static HBRUSH hbrushstatic;
    static int  music[3] = { 102,103,104 };
    static TCHAR * speak[4] =
    {
        "自从遇见你,我们就保持暧昧的关系,虽然痛苦但是很甜蜜",
        "当我们互相坦露后,就像一阵幸福的风吹来,你我承诺会到永远",
        "可现实中我们仍然需要自己的空间,就像这红色的心看似相爱却早已心生抱怨",
        "渐渐我们的心散去,我们选择成全彼此,其实岁月留给我们的只是空白"
    };
    switch (message)
    {
    case WM_CREATE :
        SetTimer(hwnd, 1, 1000 * 60 *4.5, NULL);
        PlaySound((LPSTR)IDR_WAVE1, NULL, SND_RESOURCE | SND_ASYNC);
        hwndstatic = CreateWindow("static", NULL, WS_CHILD |WS_VISIBLE, 0, 10, 600, 40, hwnd,(HMENU)1, (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE), NULL);
        hbrushstatic = CreateSolidBrush(RGB(255,255, 255));
        return 0;
    case WM_TIMER:
        i++;
        if (i < 4 && i >= 1)
            PlaySound((LPSTR)music[i - 1], NULL, SND_ASYNC | SND_RESOURCE);
        InvalidateRect(hwnd, NULL, TRUE);
        return 0;
    case WM_SIZE :
        cxClient = LOWORD(lParam);
        cyClient = HIWORD(lParam);
        return 0;
    case WM_PAINT :
        hdc = BeginPaint(hwnd, &ps);
        if (i < 4)
        {
            DrawHeart(hdc, i, cxClient, cyClient);
            SetWindowText(hwndstatic, speak[i]);
        }
        
        EndPaint(hwnd, &ps);
        return 0;
    case WM_CTLCOLORSTATIC :
        j = GetWindowLong((HWND)lParam, GWL_ID);
        if (j == 1)
        {
            SetTextColor((HDC)wParam, color[i]);
            SetBkColor((HDC)wParam, RGB(255, 255, 255));
            return (LRESULT)hbrushstatic;
        }
            break;
    case WM_DESTROY :
        PostQuitMessage(0);
        return 0;
    default :
        return DefWindowProc(hwnd, message, wParam, lParam);
    }
    return 0;
}


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Windows 平台上使用 CMake 编 Win32 程序,你需要进行以下步骤: 1. 首先,确保你已经安装了 CMake 和 Visual Studio。CMake 是一个跨平台的构建工具,可以生成 Visual Studio 项目文件。 2. 创建一个新的文件夹作为你的项目文件夹,并在其中创建一个 CMakeLists.txt 文件。CMakeLists.txt 是 CMake 的配置文件,用于描述项目的构建过程。 3. 在 CMakeLists.txt 中,首先设置最低版本的 CMake: ``` cmake_minimum_required(VERSION 3.12) ``` 4. 然后,使用 `project` 命令指定你的项目名称: ``` project(YourProjectName) ``` 5. 接下来,使用 `add_executable` 命令指定你的源代码文件: ``` add_executable(YourProjectName main.cpp) ``` 6. 然后,通过 `target_link_libraries` 命令添加任何需要的库: ``` target_link_libraries(YourProjectName YourLibrary) ``` 7. 最后,通过 `set_target_properties` 命令设置一些属性,如字符集和输出路径: ``` set_target_properties(YourProjectName PROPERTIES WIN32_EXECUTABLE YES OUTPUT_NAME "YourExecutableName" ) ``` 8. 保存并关闭 CMakeLists.txt 文件。 9. 打开命令提示符或 PowerShell,并导航到你的项目文件夹。 10. 运行以下命令生成 Visual Studio 项目文件: ``` cmake -G "Visual Studio 16 2019" . ``` 注意,这里的 "Visual Studio 16 2019" 是你的 Visual Studio 版本号,根据你所安装的版本进行相应修改。 11. 完成后,你将在项目文件夹中看到生成的 Visual Studio 项目文件。 12. 双击打开生成的项目文件,然后在 Visual Studio 中构建和运行你的 Win32 程序。 这样,你就可以使用 CMake 在 Windows 上编和构建 Win32 程序了。希望对你有所帮助!如果有任何问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值