Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.09.2011, 17:07   #1
БалаШагаЛ
Форумчанин
 
Регистрация: 11.02.2011
Сообщений: 131
По умолчанию Неопределённая ссылка на InitCommonControls() и CreateStatusWindow()

Есть программа, внутри которой создаётся меню для окна. Однако компилятор её компилировать не хочет. Выдаёт две ошибки:

undefined reference to 'InitCommonControls@0'
undefined reference to 'CreateStatusWindowA@16'

Указывает на эти ошибки в этих строках:
Код:
InitCommonControls();
hStatusWindow=CreateStatusWindow(WS_CHILD|WS_VISIBLE,"Menu sample",hWnd,wId);
Что означают эти ошибки?
БалаШагаЛ вне форума Ответить с цитированием
Старый 19.09.2011, 17:07   #2
БалаШагаЛ
Форумчанин
 
Регистрация: 11.02.2011
Сообщений: 131
По умолчанию

Вот полный текст программы:
Код:
#include <windows.h>
#include <commctrl.h>

const int IDM_Enable_Disable=0;
const int IDM_Exit=1;
const int IDM_About=2;
const int IDP_File=3;
const int IDP_Help=4;
const UINT_PTR IDM_Bitmap=5;

char *pMessages[]
{
    "Enable or disable exit",
    "Exit from the program",
    "About this program",
    "File operations",
    "Help operations",
    "Menu example",
    "System menu"
};

LRESULT CALLBACK MenuDemoWndProc(HWND,UINT,UINT,LONG);

HWND hStatusWindow;
UINT wId;
HMENU hMenu,hFileMenu,hHelpMenu;
HINSTANCE hInst;

int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpszCmdParam,int nCmdShow)
{
    HWND hWnd;
    WNDCLASS WndClass;
    MSG Msg;
    hInst=hInstance;
    WndClass.style=CS_HREDRAW|CS_VREDRAW;
    WndClass.lpfnWndProc=(WNDPROC)MenuDemoWndProc;
    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=NULL;
    WndClass.lpszClassName="MenuExample";
    if (!RegisterClass(&WndClass))
    {
        MessageBox(NULL,"Cannot register class","Error",MB_OK);
        return 0;
    }
    hWnd=CreateWindow("MenuExample","Programm No 2",
                      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;
    }
    InitCommonControls();
    hStatusWindow=CreateStatusWindow(WS_CHILD|WS_VISIBLE,"Menu sample",hWnd,wId);
    if (!hStatusWindow)
    {
        MessageBox(NULL,"Cannot create status window","Error",MB_OK);
        return 0;
    }
    AppendMenu((hFileMenu=CreatePopupMenu()),MF_ENABLED|MF_STRING,IDM_Enable_Disable,"&Enable exit");
    AppendMenu(hFileMenu,MF_GRAYED|MF_STRING,IDM_Exit,"E&xit");
    AppendMenu((hHelpMenu=CreatePopupMenu()),MF_DISABLED|MF_STRING,IDM_About,"&About");
    hMenu=CreateMenu();
    AppendMenu(hMenu,MF_ENABLED|MF_POPUP,(UINT)hFileMenu,"&File");
    AppendMenu(hMenu,MF_ENABLED|MF_POPUP,(UINT)hHelpMenu,"&Help");
    SetMenu(hWnd,hMenu);
    ShowWindow(hWnd,nCmdShow);
    UpdateWindow(hWnd);
    DrawMenuBar(hWnd);
    while(GetMessage(&Msg,NULL,0,0))
    {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
    }
    return Msg.wParam;
}

LRESULT CALLBACK MenuDemoWndProc(HWND hWnd,UINT Message,UINT wParam,LONG IParam)
{
    RECT Rect;
    static UINT nFlag=MF_ENABLED;
    char *pContent[]
    {
        "Enable exit",
        "Disable exit"
    };
    static UINT nIndex=0;
    static HBITMAP hBitmap;
    int nDimension;
    switch(Message)
    {
        case WM_CREATE:
        nDimension=GetSystemMetrics(SM_CYMENU);
        hBitmap=(HBITMAP)LoadImage(hInst,"msdogs.bmp",IMAGE_BITMAP,nDimension*2,nDimension,LR_LOADFROMFILE);
        AppendMenu(GetMenu(hWnd),MF_BITMAP,IDM_Bitmap,(LPCSTR)hBitmap);
        break;
        case WM_COMMAND:
        switch(wParam)
        {
            case IDM_Enable_Disable:
            EnableMenuItem(hFileMenu,IDM_Exit,MF_BYCOMMAND|nFlag);
            nFlag=(nFlag==MF_ENABLED)?MF_GRAYED:MF_ENABLED;
            nIndex=(nIndex==0)?1:0;
            ModifyMenu(hFileMenu,IDM_Enable_Disable,MF_BYCOMMAND|MF_STRING,IDM_Enable_Disable,pContent[nIndex]);
            break;
            case IDM_Exit:
            SendMessage(hWnd,WM_CLOSE,NULL,NULL);
            break;
        }
        case WM_SIZE:
        SendMessage(hStatusWindow,WM_SIZE,wParam,IParam);
        GetClientRect(hWnd,&Rect);
        return 0;
        case WM_MENUSELECT:
        if (((UINT)HIWORD(wParam)==0xffff)&((HMENU)IParam==0))
        {
            SendMessage(hStatusWindow,SB_SETTEXT,(WPARAM)0,(LPARAM)pMessages[5]);
            return 0;
        }
        if ((UINT)HIWORD(wParam)&MF_SYSMENU)
        {
            SendMessage(hStatusWindow,SB_SETTEXT,(WPARAM)0,(LPARAM)pMessages[6]);
            return 0;
        }
        if ((UINT)HIWORD(wParam)&MF_POPUP)
        {
            SendMessage(hStatusWindow,SB_SETTEXT,(WPARAM)0,(LPARAM)pMessages[3+LOWORD(wParam)]);
            return 0;
        }
        SendMessage(hStatusWindow,SB_SETTEXT,(WPARAM)0,(LPARAM)pMessages[LOWORD(wParam)]);
        return 0;
        case WM_DESTROY:
        DeleteObject(hBitmap);
        PostQuitMessage(0);
        return 0;
    }
    return DefWindowProc(hWnd,Message,wParam,IParam);
}
Компилятор - Code::Blocks.
БалаШагаЛ вне форума Ответить с цитированием
Старый 19.09.2011, 19:35   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Цитата:
Что означают эти ошибки?
Не поверите... абсолютно то, что написано. Компилятор не нашел реализации функций.

Подключите либу comctl32
p51x вне форума Ответить с цитированием
Старый 19.09.2011, 21:21   #4
БалаШагаЛ
Форумчанин
 
Регистрация: 11.02.2011
Сообщений: 131
По умолчанию

Ура! Получилось! Спасибо большое!
А то я посмотрел, вроде в commctrl.h сигнатура и параметры обьявлены, а оказывается надо ещё дополнительно библиотеки подключать. Теперь ясно.
Ещё раз спасибо огромное за помощь!
БалаШагаЛ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ссылка в VB 6 serega112000 Помощь студентам 2 01.02.2010 21:44
Ссылка joojle Microsoft Office Excel 3 26.05.2009 14:25
Ошибка InitCommonControls() HunterMan Win Api 1 09.04.2008 23:59