Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Заполнение Combobox и функция Beep

12K
15 мая 2007 года
Lyalya_ua
25 / / 24.11.2006
У меня проблема такого рода - моя процедура для записи значений в Combobox не раьотае и я не понимаю причины.Может кто-то сможет заметить какие-то ошибки.
И если может кто-то знает какие именно значения частоты и времени надо для функцыи Beep.
Cпасибо!
Код:
#include <windows.h>

LONG APIENTRY   WndProc(HWND, UINT, WPARAM, LPARAM);
const char szWindowClass[] = "Windows";

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)

{
    MSG msg;       
    HWND hWndMain;
    LPRECT rcParent;

WNDCLASS wc;

    wc.style        = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc  = (WNDPROC)WndProc;
    wc.cbClsExtra   = 0;
    wc.cbWndExtra   = 0;
    wc.hInstance    = hInstance;
    wc.hIcon        = LoadIcon(hInstance,IDI_APPLICATION);
    wc.hCursor      = LoadCursor(NULL,IDC_UPARROW);
    wc.hbrBackground    = (HBRUSH)(COLOR_WINDOW+23);
    wc.lpszMenuName = NULL;
    wc.lpszClassName    = szWindowClass;

WNDCLASS wpc;
 

//Step1. Registering Window Class
   
    if (!RegisterClass(&wc))
    {
MessageBox(NULL, "Window Registration Failed", "Error", MB_ICONEXCLAMATION | MB_OK);
        return 1;
    }

//Step 2.Creating the Window

    hWndMain = CreateWindow(szWindowClass,"Main Window",WS_OVERLAPPEDWINDOW,250,350,300,300,NULL, NULL, hInstance, NULL);

   if (!hWndMain)
   {
    MessageBox(NULL, "Window Creation Failed", "Error", MB_ICONEXCLAMATION | MB_OK);
        return 2;
   }

ShowWindow(hWndMain,nCmdShow);
UpdateWindow(hWndMain);

//Step 3. Procedures to fill the combobox values

void FillListBox(HWND Box)
{
    TCHAR *pVarName[] = {"1", "1.5", "2", "2.5", "3"};
   
     for(int i=0; i<5; i++)
 
             SendMessage(Box, CB_ADDSTRING, 0, (LPARAM)pVarName);
     
}
   
void FillListBox2(HWND Box2)
{
     TCHAR *pVarName2[] = {"50", "75", "100",};
     
     for(int j=0; j<3; j++)
 
             SendMessage(Box2, CB_ADDSTRING, 0, (LPARAM)pVarName2[j]);
     
}          


//Step 4. Creating Funny stuff
 
HWND Box = CreateWindow("combobox","detka",CBS_DROPDOWN|WS_CHILD|WS_VISIBLE,100,10,100,30,hWndMain,NULL,NULL,NULL);
HWND Box2 = CreateWindow("combobox","detka",CBS_DROPDOWN|WS_CHILD|WS_VISIBLE,100,85,100,30,hWndMain,NULL,NULL,NULL);
HWND Button = CreateWindow("button","Beeep!",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,120,170,65,45,hWndMain,NULL,NULL,NULL);
HWND Text = CreateWindow("static",NULL,WS_CHILD|WS_VISIBLE|SS_LEFT,100,50,100,20,hWndMain,NULL,NULL,NULL);
HWND Text2 = CreateWindow("static",NULL,WS_CHILD|WS_VISIBLE|SS_LEFT,100,130,100,20,hWndMain,NULL,NULL,NULL);

//Step5. Fill in the combobox with values

            //Populate ComboBoxes
            FillListBox(Box);
            FillListBox2(Box2);

             //Set a Default Selection
             SendMessage(Box,CB_SETCURCEL, 0, 0);
             GetWindowText(Box, pVarName, 30);
             SetWindowText(Text, pVarName);
             
            SendMessage(Box2, CB_SETCURSEL, 0, 0);
            GetWindowText(Box2, pVarName2, 30);
            SetWindowText(Text2, pVarName2);

//Step 6: The Message Loop
   
   while (GetMessage(&msg, NULL, 0, 0))
   
{
TranslateMessage(&msg);
    DispatchMessage(&msg);
}  
    return msg.wParam;
}



// Step 7. Window Procedure for main window
    HINSTANCE hInstance;
   
    LONG APIENTRY WndProc(HWND hWndMain, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case BM_CLICK:
//Beep();

    case WM_CLOSE:
        DestroyWindow(hWndMain);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWndMain, message, wParam, lParam);
   }
   return 0;

}
18K
21 мая 2007 года
un_named
60 / / 24.04.2007
А почему в шаге 4, при создании контролов hInstance отсутствует (должен быть вторым с конца)? А почему АйДиКонтрола нет(должен быть третьим с конца)?
Советую почитать МСДН или что-нибудь на русском, непосредственно по созданию ДОЧЕРНИХ ОКОН функциями CreateWindow или CreateWindowEx.
Тут: http://vsokovikov.narod.ru/New_MSDN_API/Window/win_child.htm или тут:
http://www.wasm.ru/article.php?article=1001009
Особое внимание нужно обратить на параметры передаваемые этим функциям.
Контролы лучше рисовать на сообщение виндовс - WM_CREATE.

Что касается Beep, то частота и длительность звукового сигнала определяются аппаратным и программным обеспечением и различны для разных компьютеров. Можно глянуть на эту функцию здесь:
http://www.firststeps.ru/mfc/winapi/r.php?99
Хотя можно использовать и функцию MessageBeep, чтобы проигрывать готовый звуковой файл:
http://www.firststeps.ru/mfc/winapi/r.php?104

Возможно я ещё чего-нибудь не заметил - сказал только о том, что сразу бросилось в глаза.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог