Тема: Можливість вибору програми, що запускається, з декількох варіантів
Допоможіть будь ласка, новачок в цьому, але треба терміново.
Є програма(проект win32) на С++ її треба змінити щоб виконувалось наступне, в мене не виходить зробити завдання, не можу зрозуміти про що йде мова:
Завдання:  Додати в програму можливість вибору програми, що запускається, з декількох варіантів
(наприклад, зі списку), передбачити можливість вибіркового завершення
процесів.
Код програми:
#include <windows.h>
#include <stdio.h>
#include "proc.h"
LRESULT CALLBACK ProcessesWndProc(HWND, UINT, UINT, LONG);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPSTR lpszCmdParam, int nCmdShow)
{
    HWND hWnd;
    WNDCLASS WndClass;
    MSG Msg;
    char szClassName[] = "Processes";
    WndClass.style = CS_HREDRAW | CS_VREDRAW;
    WndClass.lpfnWndProc = ProcessesWndProc;
    WndClass.cbClsExtra = 0;
    WndClass.cbWndExtra = 0;
    WndClass.hInstance = hInstance;
    WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
    WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    WndClass.lpszMenuName = "ProcessesMenu";
    WndClass.lpszClassName = szClassName;
    if (!RegisterClass(&WndClass))
    {
        MessageBox(NULL, "Cannot register class", "Error", MB_OK);
        return 0;
    }
    hWnd = CreateWindow(szClassName, "Processes Demo",
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT,
        CW_USEDEFAULT, CW_USEDEFAULT,
        NULL, NULL, hInstance, NULL);
    if (!hWnd)
    {
        MessageBox(NULL, "Cannot create window", "Error", MB_OK);
        return 0;
    }
    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);
    while (GetMessage(&Msg, NULL, 0, 0))
    {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
    }
    return Msg.wParam;
}
LRESULT CALLBACK ProcessesWndProc(HWND hWnd, UINT Message,
    UINT wParam, LONG lParam)
{
    const int Max = 10;
    STARTUPINFO StartupInfo;
    static int ProcessNumber = 2;
    static PROCESS_INFORMATION ProcessInformation[Max];
    static char cMyMessage[80];
    static HMENU hSubMenu;
    switch (Message)
    {
    case WM_CREATE:
        hSubMenu = GetSubMenu(GetMenu(hWnd), 0);
        return 0;
    case WM_COMMAND:
        switch (LOWORD(wParam))
        {
        case IDM_New_Process:
            if (ProcessNumber < Max)
            {
                StartupInfo.cb = sizeof(STARTUPINFO);
                StartupInfo.lpReserved = NULL;
                StartupInfo.lpDesktop = NULL;
                StartupInfo.lpTitle = NULL;
                StartupInfo.dwFlags = STARTF_USESHOWWINDOW;
                StartupInfo.wShowWindow = SW_SHOWNORMAL;
                StartupInfo.cbReserved2 = 0;
                StartupInfo.lpReserved2 = NULL;
                if (CreateProcess(NULL, "Notepad.exe",
                    NULL, NULL, FALSE, 0,
                    NULL, NULL, &StartupInfo,
                    &(ProcessInformation[ProcessNumber])))
                {
                    ProcessNumber++;
                    wsprintf(cMyMessage, "hProcess is %x.\nThread is %x.\ndwProcessId is %x.\ndwThreadId is %x.", 
                        ProcessInformation[ProcessNumber -
                        1].hProcess,
                        ProcessInformation[ProcessNumber -
                        1].hThread,
                        ProcessInformation[ProcessNumber -
                        1].dwProcessId,
                        ProcessInformation[ProcessNumber -
                        1].dwThreadId);
                    MessageBox(hWnd, cMyMessage, "Process is created", MB_OK);
                 EnableMenuItem(hSubMenu, IDM_Kill_Process,
                            MF_BYCOMMAND | MF_ENABLED);
                }
                else
                    MessageBox(hWnd, "Cannot create process",
                        "Process creation", MB_OK);
            }
            else
            {
                MessageBox(hWnd, "Too many created processes...",
                    "Process creation", MB_OK);
            }
            break;
        case IDM_Kill_Process:
            if (ProcessNumber > 0)
            {
                if (TerminateProcess(ProcessInformation[ProcessNumber - 1].hProcess,
                    0))
                {
                    ProcessNumber - 0;
                    if (!ProcessNumber)
                        EnableMenuItem(hSubMenu, IDM_Kill_Process,
                            MF_BYCOMMAND |
                            MF_GRAYED);
                }
                else
                    MessageBox(hWnd, "Cannot terminate process",
                        "Process termination", MB_OK);
            }
            else MessageBox(hWnd, "No more processes", "Process termination", MB_OK);
                break;
        case IDM_Exit:
            SendMessage(hWnd, WM_CLOSE, 0, 0);
            break;
        }
        return 0;
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    }
    return DefWindowProc(hWnd, Message, wParam, lParam);
}