1. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление

создание Toolbar-а с помощью Winapi

Тема в разделе "MS Visual C++", создана пользователем Zerkal0, 27 мар 2010.

  1. Zerkal0

    Zerkal0 Member

    Репутация:
    0
    Регистрация:
    21 май 2009
    Сообщения:
    15
    Симпатии:
    0
    Здраствуйте.


    3-й день сижу с примером программы 6_2 из книги Финогенова "Win32.Основы программирования". Всё делаю как по книге, работаю в среде VS 2003.net (пробовал делать в VS 2008 Express edition, результат тот же), получается такая фигня.
    Построение решения(прокта) выполняется без ошибок, когда запускаю процесс отладки, вот что выдаёт:

    "Необработанное исключение в "0x5d5cd465" в 6_2.exe: 0x0000005: Нарушение прав доступа при чтении "0x0096fffc""

    Внизу среды разработки, где показывают переменные в параметрах переменной hwnd написано: 0x00040954 {unused=???}
    CX0030:ошибка: невозможно вычислить выражение

    Прошу строго не судить за ляпы, в программировании новичок.

    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Вот код проги (win32 приложение):</div></div><div class="sp-body"><div class="sp-content">
    Код:
    //Заголовочный файл 6_2.h
    
    #define ID_1 300//Идентификатор кнопки 1
    #define ID_2 301//Идентификатор кнопки 2
    #define ID_3 302//Идентификатор кнопки 3
    #define ID_BTNS 400//Идентификатор ресурса-файла с изображением кнопок
    
    LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
    
    void OnCommand(HWND,int,HWND,UINT);
    void OnPaint(HWND);
    BOOL OnCreate(HWND hwnd,LPCREATESTRUCT);
    void OnDestroy(HWND);
    
    
    //Файл 6_2.cpp
    
    #pragma comment(lib, "comctl32.lib")
    
    #include<windows.h>
    #include<windowsx.h>
    #include<commctrl.h>
    
    #include"6_2.h"
    
    HBRUSH hBlueBrush,hGreenBrush;
    
    int sw;//Переключатель цвета окна
    HINSTANCE hI;//Дескриптор приложения
    
    
    
    int WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, int) {
    
    hI=hInst;
    char szClassName[] = "MainWindow";
    char szTitle[] = "Программа 6_2";
    
    MSG Msg;
    WNDCLASS wc;
    
    memset(&wc,0,sizeof(wc));
    
    wc.lpfnWndProc=WndProc;
    wc.hInstance=hInst;
    wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
    wc.hCursor=LoadCursor(NULL,IDC_ARROW);
    wc.hbrBackground=GetStockBrush(WHITE_BRUSH);
    wc.lpszClassName=reinterpret_cast<LPCWSTR>(szClassName);
    RegisterClass(&wc);
    
    HWND hwnd=CreateWindow(reinterpret_cast<LPCWSTR>(szClassName),reinterpret_cast<LPCWSTR>(szTitle),WS_OVERLAPPEDWINDOW,
    10,10,300,150,HWND_DESKTOP,NULL,hInst,NULL);
    ShowWindow(hwnd,SW_SHOWNORMAL);
    
    while(GetMessage(&Msg,NULL,0,0))
    DispatchMessage(&Msg);
    
    
    return 0;
    }
    
    LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam, LPARAM lParam) {
    
    switch(msg) {
    HANDLE_MSG(hwnd,WM_COMMAND,OnCommand);
    HANDLE_MSG(hwnd,WM_PAINT,OnPaint);
    HANDLE_MSG(hwnd,WM_CREATE,OnCreate);
    HANDLE_MSG(hwnd,WM_DESTROY,OnDestroy);
    default:
    return(DefWindowProc(hwnd,msg,wParam,lParam));
    }
    }
    
    void OnDestroy(HWND) {
    PostQuitMessage(0);
    }
    
    
    //Функция обработки сообщений WM_CREATE
    BOOL OnCreate(HWND hwnd,LPCREATESTRUCT) {
    
    hBlueBrush=CreateSolidBrush(RGB(100,100,255));
    hGreenBrush=CreateSolidBrush(RGB(100,255,100));
    
    TBBUTTON tbb[3];//массив структур TBUTTON
    
    ZeroMemory(&tbb,sizeof(tbb));//Обнулим весь массив структур
    
    tbb[0].iBitmap=0;//Порядковый номер кнопки 1
    tbb[0].idCommand=ID_1;//Идентификатор кнопки 1
    tbb[0].fsState=TBSTATE_ENABLED;//Разрешить управление от кнопки 1
    
    tbb[1].iBitmap=1;//Порядковый номер кнопки 2
    tbb[1].idCommand=ID_2;//Идентификатор кнопки 2
    tbb[1].fsState=TBSTATE_ENABLED;//Разрешить управление от кнопки 2
    
    tbb[2].iBitmap=2;//Порядковый номер кнопки 3
    tbb[2].idCommand=ID_3;//Идентификатор кнопки 3
    tbb[2].fsState=TBSTATE_ENABLED;//Разрешить управление от кнопки 3
    
    
    CreateToolbarEx(hwnd,WS_CHILD|WS_BORDER|WS_VISIBLE,-1,3,
    hI,ID_BTNS,tbb,3,16,16,16,16,sizeof(TBBUTTON));//Создаём инструментальную панель
    
    
    return TRUE;	
    }
    
    
    
    
    //Функция обработки сообщений WM_PAINT
    void OnPaint(HWND hwnd) {
    
    PAINTSTRUCT ps;
    HDC hdc=BeginPaint(hwnd,&ps);
    
    if(sw==1)
    FillRect(hdc,&ps.rcPaint,hBlueBrush);
    if(sw==2){
    FillRect(hdc,&ps.rcPaint,hGreenBrush);
    }
    EndPaint(hwnd,&ps);
    
    
    }
    
    
    void OnCommand(HWND hwnd,int id,HWND,UINT) 
    {
    switch(id){//id=идентификатор выбранного пункта меню
    case ID_1://Нажали кнопку 1 - изменить цвет
    sw=1;
    InvalidateRect(hwnd,NULL,TRUE);
    break;
    case ID_2://Нажали кнопку 2 - изменить цвет
    sw=2;
    InvalidateRect(hwnd,NULL,TRUE);
    break;
    case ID_3://Нажали кнопку 2 - завершить приложение
    DestroyWindow(hwnd);
    }
    
    }
    // Файл ресурсов 6_2.rc

    #include "6_2.h"

    ID_BTNS BITMAP "buttons.bmp"//Файл с изображением кнопок


    ...Вот
    Картинку buttons.bmp делаю размером 48 x 16, размещаю в папке проекта 6_2.


    ПАМАГИТЕ люди добрые, а то на луну выть начну. Буду очень признателен.
     
Загрузка...
Похожие Темы - создание Toolbar помощью
  1. Иван Кочнев
    Ответов:
    35
    Просмотров:
    352
  2. EnderBro3D
    Ответов:
    1
    Просмотров:
    113
  3. dmitriy8
    Ответов:
    8
    Просмотров:
    295
  4. assasinfil
    Ответов:
    4
    Просмотров:
    184
  5. vitte
    Ответов:
    10
    Просмотров:
    418

Поделиться этой страницей