首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Windows API对话框不使用资源文件

您好!Windows API对话框不使用资源文件的方法是通过使用动态对话框模板。动态对话框模板允许您在代码中创建对话框,而不是使用资源文件。以下是一个简单的示例:

代码语言:c++
复制
#include<windows.h>
#include <commctrl.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    // 初始化公共控件库
    INITCOMMONCONTROLSEX iccx;
    iccx.dwSize = sizeof(INITCOMMONCONTROLSEX);
    iccx.dwICC = ICC_STANDARD_CLASSES;
    InitCommonControlsEx(&iccx);

    // 创建对话框模板
    DLGTEMPLATE* pTemplate = (DLGTEMPLATE*)GlobalAlloc(GPTR, 1024);
    pTemplate->style = WS_POPUP | WS_BORDER | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND | DS_MODALFRAME | WS_VISIBLE;
    pTemplate->cdit = 0;
    pTemplate->x = 0;
    pTemplate->y = 0;
    pTemplate->cx = 200;
    pTemplate->cy = 100;
    pTemplate->menu = (UINT)NULL;
    pTemplate->windowClass = (UINT)NULL;
    pTemplate->title = (UINT)NULL;

    // 添加控件
    DLGITEMTEMPLATE* pItemTemplate = (DLGITEMTEMPLATE*)(pTemplate + 1);
    pItemTemplate->style = WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON;
    pItemTemplate->dwExtendedStyle = 0;
    pItemTemplate->x = 50;
    pItemTemplate->y = 10;
    pItemTemplate->cx = 100;
    pItemTemplate->cy = 25;
    pItemTemplate->id = IDOK;
    pItemTemplate->windowClass = (UINT)NULL;
    pItemTemplate->title = (UINT)NULL;
    pTemplate->cdit = 1;

    // 创建对话框
    HWND hwnd = CreateDialogIndirect(hInstance, pTemplate, NULL, NULL);
    GlobalFree(pTemplate);

    // 显示对话框
    ShowWindow(hwnd, nCmdShow);

    // 消息循环
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return 0;
}

在这个示例中,我们使用了动态对话框模板创建了一个简单的对话框,并添加了一个按钮。这个对话框没有使用资源文件,而是在代码中创建的。您可以根据需要添加更多的控件和样式。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

duilib基本框架

最近我一个同学在项目中使用到了duilib框架,但是之前并没有接触过,他与我讨论这方面的内容,看着官方给出的精美的例子,我对这个库有了很大的兴趣,我自己也是初学这个东东,我在网上花了不少时间来找相关的资料,但是找到的不多,官方给的文档又不全面,但是我还是找到了一些博主贡献的优秀的博文,现在我是通过博文上的讲解加上自己查看源代码的一些心得,正在艰难的前行。现在正在看的是博主Alberl在博客园中的duilib基础教程中的内容,下面的代码都是在他博客中给出代码的基础上做了一点小小的修改。点击这里跳转到对应的博客,以及博主夜雨無聲的博客,博客地址

01

内嵌Activex的Activex插件开发

介绍:   如今在许多流媒体视频网站(youku,tudou......)我们都会发现,观看视频之前都会有一段时间的广告,甚至在观看视频途中也会插入一些 广告。实现这个效果的可以有多种技术。使用Javascript就可以实现,只需要在同一个位置分别创建两个Object,一个嵌入Flash插件,一个 嵌入 WMP插件,然后切换显示这两个控件即可。   使用COM/Activex技术也可以在同一个控件中实现这样的功能。 插件功能描述:   上周在某个公司碰到这么一个问题,它们需要创建一个插件,内部嵌入一个Flash插件和Windows Media Player插件。然后写一个Web测试页面测试此Activex页面。页面上有三个输入框和一个按钮(Play)。第一个输入框输入falsh URL(.swf),第二个输入框输入.swf播放时间长度(秒),即视频广告时间,第三个输入框输入.wmv URL。点击Play按钮后,页面按钮将三个参数传递给控件,控件优先播放.swf,要布满整个控件的大小。.swf播放指定的时间之后,然后播 放.wmv,wmv也要布满整个控件。

03

socket---TCP服务器界面

#include<winsock2.h> #pragma comment(lib,"ws2_32.lib") #define DEFAULT_iPort 5000 LRESULT CALLBACK DialProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nCmdShow) { DialogBox(hInstance,(LPCSTR)IDD_FORMVIEW, NULL,(DLGPROC)DialProc); return 0; } LRESULT CALLBACK DialProc(HWND hDIg, UINT uID, WPARAM wParam, LPARAM lParam) {             char ip[16]; char port[5];//端口号 char recvBuf[1000];//缓存区大小 char sendBuf[1000]; SOCKET sListen, sAccept; SOCKADDR_IN ser, cli; int iLen = sizeof(cli); sListen = socket(AF_INET, SOCK_STREAM,0); sAccept= socket(AF_INET, SOCK_STREAM,0); switch (uID) { case WM_COMMAND://对话框消息 switch(wParam) { case IDC_IPSTART: {    GetDlgItemText(hDIg, IDC_IP,ip, 16); GetDlgItemText(hDIg, IDC_PORT,port, 16); ser.sin_family = AF_INET; ser.sin_addr.s_addr = inet_addr(ip); ser.sin_port = htons(atoi(port)); bind(sListen, (sockaddr *)&ser, sizeof(ser)); listen(sListen, 5); sAccept = accept(sListen, (sockaddr *)&cli, &iLen); if (INVALID_SOCKET == sAccept) { SetDlgItemText(hDIg, IDC_EDIT1, "服务器创建失败"); } else { SetDlgItemText(hDIg, IDC_RECVBUF, "服务器创建成功"); } } break; case IDC_RECVBUF: if (INVALID_SOCKET == sAccept) { } else { recv(sAccept, recvBuf, sizeof(recvBuf), 1000); SetDlgItemText(hDIg, IDC_RECVBUF, recvBuf); } break; case IDC_SENDBUF: GetDlgItemText(hDIg, IDC_SENDBUF, sendBuf, 1000); send(sAccept, sendBuf, sizeof(recvBuf), 1000); SetDlgItemText(hDIg, IDC_SENDBUF, ""); break; case IDC_STOP://关闭窗口  { closesocket(sAccept);   closesocket(sListen);   WSACleanup(); EndDialog(hDIg,wParam);   } break; } break; default: break; }

02
领券