【问题标题】:c++ progress bar marquee style not workingc ++进度条选框样式不起作用
【发布时间】:2015-01-24 10:24:31
【问题描述】:

我尝试在 C++ 中制作进度条,它成功地设置了位置,但是当我尝试使它成为选框时,我总是出错

#include <windows.h>
#include <commctrl.h>
#include <tchar.h>

LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

HWND hWndButton;
HWND hEdit;
HWND hProgress;

char finalName[25];
char name[10];

int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmd, int nCmdShow){

    HWND hwnd;               /* This is the handle for our window */
    MSG messages;            /* Here messages to the application are saved */
    WNDCLASS wincl;        /* Data structure for the windowclass */

    ZeroMemory(&wincl, sizeof(WNDCLASS));

    /* The Window structure */
    wincl.hInstance = hInst;
    wincl.lpszClassName = "Window Class";
    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

    /* Register the window class, and if it fails quit the program */
    if (!RegisterClass (&wincl))
        return 0;

    /* The class is registered, let's create the program*/
    hwnd = CreateWindow (
           "Window Class",         /* Classname */
           ("Code::Blocks Template Windows App"),       /* Title Text */
           WS_OVERLAPPEDWINDOW, /* default window */
           433,                 /* Windows decides the position */
           134,                 /* where the window ends up on the screen */
           500,                 /* The programs width */
           500,                 /* and height in pixels */
           HWND_DESKTOP,        /* The window is a child-window to desktop */
           NULL,                /* No menu */
           hInst,       /* Program Instance handler */
           NULL                 /* No Window Creation data */
           );

    /* Make the window visible on the screen */
    ShowWindow (hwnd, nCmdShow);

    /* Run the message loop. It will run until GetMessage() returns 0 */
    while (GetMessage (&messages, NULL, 0, 0))
    {
        /* Translate virtual-key messages into character messages */
        TranslateMessage(&messages);
        /* Send message to WindowProcedure */
        DispatchMessage(&messages);
        UpdateWindow(hwnd);
    }
    return 1;
}


/*  This function is called by the Windows function DispatchMessage()  */

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)                  /* handle the messages */
    {
        case WM_DESTROY:
            PostQuitMessage (wParam);       /* send a WM_QUIT to the message queue */
            exit(1);
            break;
        case WM_CREATE:
            UpdateWindow(hwnd);
            hWndButton = CreateWindow("BUTTON", "Press Me!", WS_TABSTOP|WS_VISIBLE|WS_CHILD|BS_DEFPUSHBUTTON, 0, 25, 100, 25, hwnd, (HMENU)1, NULL, NULL);
            hEdit = CreateWindow("EDIT", "Write your name!", WS_CHILD|WS_VISIBLE|ES_MULTILINE|ES_AUTOVSCROLL|ES_AUTOHSCROLL, 0, 0, 200, 25, hwnd, (HMENU)2, NULL, NULL);
            hProgress = CreateWindow(PROGRESS_CLASS, NULL, WS_CHILD|WS_VISIBLE|PBS_MARQUEE, 0, 100, 500, 20, hwnd, (HMENU)3, NULL, NULL);
            SendMessage(hProgress, PBM_SETMARQUEE, 1, 1000);
            UpdateWindow(hwnd);
            break;
        case WM_COMMAND:
            if(wParam == 1){
                GetWindowText(hEdit, _T(name), 10);
                strcpy(finalName, "Hello, ");
                strcat(finalName, name);
                MessageBox(hwnd, (LPCSTR)finalName, "Your Name", MB_OK|MB_ICONINFORMATION);
            }
            break;
        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }

}

说 PBS_MARQUEE 和 PBM_SETMARQUEE 没有在那个范围内定义,虽然我包含了 commctrl.h 头文件,有什么问题??

【问题讨论】:

  • 代码对我有用
  • @Axalo 我认为它与this 相关,但我不明白这是怎么回事,从注释部分下 PBS_MARQUEE 中的here 得到它
  • 我怀疑这是编译错误。
  • 那你怎么看? @Axalo
  • 我认为问题出在某处。其他,但我不知道它是什么。

标签: c++ winapi progress-bar marquee


【解决方案1】:

选取框模式是 Windows XP 的新功能,因此您必须将 NTDDI_VERSION 至少定义为 NTDDI_WINXP 才能包含这些常量。请参阅Using the Windows Headers 了解更多信息。

【讨论】:

  • #define NTDDI_VERSION NTDDI_WINXP 但还是同样的错误没有变化
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-29
  • 1970-01-01
  • 1970-01-01
  • 2018-04-09
  • 1970-01-01
相关资源
最近更新 更多