Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Реализация программ на чистом WinAPI


Рекомендуемые сообщения

Есть вопрос по поводу ComboBox в Delphi, при работе на чистом WinAPI. :bye1:

Есть код:

program winmin;uses windows,messages;varwc:TWndClassEx;MainWnd,cmb:HWND;Mesg:TMsg;str:string; function WindowProc(wnd:HWND;Msg:Integer;Wparam:Wparam;Lparam:Lparam):Lresult;stdcall; begin if msg=wm_destroy thenbeginpostquitmessage(0);Result:=0;exit;end else Result:=DefWindowProc(wnd,msg,wparam,lparam); end;var xPos,yPos,nWidth,nHeight:Integer;beginwc.cbSize:=sizeof(wc);wc.style:=cs_hredraw or cs_vredraw;wc.lpfnWndProc:=@WindowProc;wc.cbClsExtra:=0;wc.cbWndExtra:=0;wc.hInstance:=HInstance;wc.hIcon:=LoadIcon(0,idi_application);wc.hCursor:=LoadCursor(0,idc_arrow);wc.hbrBackground:=COLOR_BTNFACE+1;wc.lpszMenuName:=nil;wc.lpszClassName:='WinMin:Main';RegisterClassEx(wc);xPos:=1;yPos:=1;nWidth:=260;nHeight:=260;//Создание главного окнаMainWnd:=CreateWindowEx ( WS_EX_APPWINDOW,'WinMin:Main','dynamic form caption', ws_overlappedwindow, xPos,yPos,nWidth,nHeight,0,0, Hinstance,nil );ShowWindow(MainWnd,CmdShow);//Создание comboboxcmb:=CreateWindowEx ( 0,'COMBOBOX','combo caption', WS_CHILD or WS_VISIBLE or WS_TABSTOP or WS_VSCROLL or CBS_DROPDOWN or CBS_HASSTRINGS or CBS_OWNERDRAWFIXED, xPos+10,yPos+20,200,100,MainWnd,0, Hinstance,nil );str:='first';//Добавление элементаSendMessage(cmb,CB_ADDSTRING,0,dword(str));While GetMessage(Mesg,0,0,0) do begin TranslateMessage(Mesg); DispatchMessage(Mesg) endend.

Вся фишка в том, что элемент добавляется в Combobox, но его надписи не видно!? :)

И при нажатии на него он нормально выделяется, тоесть его текст как и должен вставляется в поле.

А если ещё вот так:

program winmin;uses windows,messages;varwc:TWndClassEx;MainWnd,cmb:HWND;Mesg:TMsg;str:string; function WindowProc(wnd:HWND;Msg:Integer;Wparam:Wparam;Lparam:Lparam):Lresult;stdcall; begin if msg=wm_destroy thenbeginpostquitmessage(0);Result:=0;exit;end else Result:=DefWindowProc(wnd,msg,wparam,lparam); end;var xPos,yPos,nWidth,nHeight:Integer;beginwc.cbSize:=sizeof(wc);wc.style:=cs_hredraw or cs_vredraw;wc.lpfnWndProc:=@WindowProc;wc.cbClsExtra:=0;wc.cbWndExtra:=0;wc.hInstance:=HInstance;wc.hIcon:=LoadIcon(0,idi_application);wc.hCursor:=LoadCursor(0,idc_arrow);wc.hbrBackground:=COLOR_BTNFACE+1;wc.lpszMenuName:=nil;wc.lpszClassName:='WinMin:Main';RegisterClassEx(wc);xPos:=1;yPos:=1;nWidth:=260;nHeight:=260;MainWnd:=CreateWindowEx ( WS_EX_APPWINDOW,'WinMin:Main','dynamic form caption', ws_overlappedwindow, xPos,yPos,nWidth,nHeight,0,0, Hinstance,nil );ShowWindow(MainWnd,CmdShow);cmb:=CreateWindowEx ( 0,'COMBOBOX','combo caption', WS_CHILD or WS_VISIBLE or WS_TABSTOP or WS_VSCROLL or CBS_DROPDOWNLIST or CBS_HASSTRINGS or CBS_OWNERDRAWFIXED, xPos+10,yPos+20,200,100,MainWnd,0, Hinstance,nil );//изменили свойство CBS_DROPDOWN на CBS_DROPDOWNLISTstr:='first';SendMessage(cmb,CB_ADDSTRING,0,dword(str));While GetMessage(Mesg,0,0,0) do begin TranslateMessage(Mesg); DispatchMessage(Mesg) endend.

Тут тоже самое, но ещё к тому же текст не вставляется в поле при нажатии, а должен!? ;)

Есть подозрение, что придётся писать CallBack функцию обработки сообщений. Но ведь можно же и без неё! (наверное).

Кто знает в чём тут дело помогите, заранее очень признателен.

P.S.

На других языках под Win32 тоже самое, например MASM. :1eye: :)

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...