CHECKBOX WIN32 API – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

CHECKBOX WIN32 API – C / C++ – Fórum – Programujte.comCHECKBOX WIN32 API – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Loli
~ Anonymní uživatel
33 příspěvků
4. 10. 2010   #1
-
0
-

Ahoj, potřeboval bych pomoct s vytvořením checkboxu a zjištěním jeho "statusu".
Vše ve Win32 API




HWND podminka; // globální proměnná
.....

case WM_COMMAND:
switch(LOWORD(wParam))
{

case IDC_PODMINKY:

if ( IsDlgButtonChecked(hwnd, IDC_PODMINKY) )
MessageBox(hwnd, "Povoleno", "s", 0);
else
MessageBox(hwnd, "Zakazano", "s", 0);

return 0;
}
....



case WM_CREATE:
podminka = CreateWindowEx( NULL,"BUTTON", "Označ", WS_CHILD | WS_VISIBLE | BS_CHECKBOX, 658,150,35,15,hwnd(HMENU)IDC_PODMINKY, NULL,NULL);
return 0;





Check box se vytvoří, ale nejde označit. Když na něj kliknu tak se neoznačí a vyhodí MessageBox "Zakázáno"


Může mi s tím někdo helpnout. Fakt nevím.
Díky

Nahlásit jako SPAM
IP: 78.80.70.–
Reklama
Reklama
liborb
~ Redaktor
+18
Guru
4. 10. 2010   #2
-
0
-

Pro začátek místo stylu BS_CHECKBOX použij BS_AUTOCHECKBOX. A dále by si měl reagovat jen na událost kliku, tj. kontrolovat hodnotu HIWORD(lParam), jinak ti to bude házet messageboxy skoro furt :)

Nahlásit jako SPAM
IP: 195.189.142.–
liborb
~ Redaktor
+18
Guru
4. 10. 2010   #3
-
0
-

Pro začátek místo stylu BS_CHECKBOX použij BS_AUTOCHECKBOX. A dále by si měl reagovat jen na událost kliku, tj. kontrolovat hodnotu HIWORD(lParam), jinak ti to bude házet messageboxy skoro furt :)

Nahlásit jako SPAM
IP: 195.189.142.–
Loli
~ Anonymní uživatel
33 příspěvků
5. 10. 2010   #4
-
0
-

Díky, BS_AUTOCHECKBOX funguje. Ale přeně nevím jak mám tj. kontrolovat hodnotu HIWORD.
V API jsem zatím začátečník

Nahlásit jako SPAM
IP: 78.80.70.–
Loli
~ Anonymní uživatel
33 příspěvků
5. 10. 2010   #5
-
0
-

JJ, už vím jak si to myslel.
Ale když už jsme u těch oken, potřeboval bych ještě vyřešit "jeden malý problém".

Když si napíšu zdroják na program který bude pracovat ve WIN32 API, tak se mi tam zobrazí ještě jedno okno (černo-býle ve stilu CMD ), a nevím jak ho skrýt nebo aspoň minimalizovat do tray.Protože když ho zavřu, tak se zavře i program ve WIN32 API.
Potřeboval bych tedy zjistit handle toho okna a příkaz ke skrytí.
Díky

Nahlásit jako SPAM
IP: 78.80.70.–
liborb
~ Redaktor
+18
Guru
5. 10. 2010   #6
-
0
-

switch(LOWORD(wParam)) { 

case(IDC_PODMINKY):
if (HIWORD(wParam) == BN_CLICKED) {
// reakce na "stisk tlacitka"
}
break;
};

Nahlásit jako SPAM
IP: 78.80.52.–
liborb
~ Redaktor
+18
Guru
5. 10. 2010   #7
-
0
-

No ... pokud to černo-bílé okno nechceš vůbec (jinak je to konzole :)), tak stačí mít správný vstupní bod aplikace tj. nikoliv main, ale WinMain.

Nahlásit jako SPAM
IP: 78.80.52.–
Loli
~ Anonymní uživatel
33 příspěvků
5. 10. 2010   #8
-
0
-

Nemohl jsem si vzpomenout na slovo konzole. Co se tíče toho vstupního bodu.
Mám WinMain ale neustále se startuje ta konzole. Nemůže to být tím že používám using namespace std; ?
Jinak zde máš "hlavičku" zdrojáku:



//Definované include
using namespace std;
//Prototipy funkcí


LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain (HINSTANCE hThisInstance,HINSTANCE hPrevInstance,LPSTR lpszArgument,int nFunsterStil)
{
...
}

Nahlásit jako SPAM
IP: 78.80.70.–
liborb
~ Redaktor
+18
Guru
5. 10. 2010   #9
-
0
-

Abych pravdu řekl, tak to mi hlava nebere :). V čem to děláš? A můžeš sem hodit nějaký projekt/příklad, kde se ti to děje? Jinak to by sis asi všimnul, kdyby si používal funkce na vytvoření konzolového okna, ne? ;)

Nahlásit jako SPAM
IP: 195.189.142.–
liborb
~ Redaktor
+18
Guru
5. 10. 2010   #10
-
0
-

Abych pravdu řekl, tak to mi hlava nebere :). V čem to děláš? A můžeš sem hodit nějaký projekt/příklad, kde se ti to děje? Jinak to by sis asi všimnul, kdyby si používal funkce na vytvoření konzolového okna, ne? ;)

Nahlásit jako SPAM
IP: 195.189.142.–
Loli
~ Anonymní uživatel
33 příspěvků
5. 10. 2010   #11
-
0
-

Dělám to v CODE:BLOCKS 8.02
Myslíš, že je chyba ve vývojovém protředí?

Jinak nikde nevytvářím žádný konzolový okno. Vytvoří se automaticky.
Vytvoří se i u tohoto primitivního zdrojáku

#include <windows.h>   

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
MessageBox(NULL, TEXT("Ahoj světe"), TEXT("Programujeme"),0);
return 0;
}

Nahlásit jako SPAM
IP: 78.80.70.–
liborb
~ Redaktor
+18
Guru
6. 10. 2010   #12
-
0
-

Code::Blocks nepoužívám, ale občas ho tu někdo doporučí, tak jsem ho zkusil. Výsledek je ten, že je to vývojovým prostředím a není to chyba, ale vlastnost. Tu konzoli máš jenom v Debug konfiguraci (Build target), a to pro ladění, výpisy atd. (pro ty co neznají OutputDebugString :)). Pokud to přehodíš na Release, tak už tam konzole není :)

Nahlásit jako SPAM
IP: 78.80.52.–
Loli
~ Anonymní uživatel
33 příspěvků
7. 10. 2010   #13
-
0
-

Díky funguje

Nahlásit jako SPAM
IP: 78.80.70.–
Loli
~ Anonymní uživatel
33 příspěvků
7. 10. 2010   #14
-
0
-

Ale teď mi to nedokáže zobrazit tyto znaky ěščřž.

Nahlásit jako SPAM
IP: 78.80.70.–
liborb
~ Redaktor
+18
Guru
7. 10. 2010   #15
-
0
-

Asi budeš muset pustit víc informací :)

Nahlásit jako SPAM
IP: 195.189.142.–
Loli
~ Anonymní uživatel
33 příspěvků
7. 10. 2010   #16
-
0
-

Prostě mi nefungují ěščřžýáíé. Jako v konzoli. Jinak liborb, stratil jsem "důvěru" v CODE::BLOCKS. Mohl by jsi mi něco doporučit?
V čem programuješ ty?

Nahlásit jako SPAM
IP: 78.80.70.–
liborb
~ Redaktor
+18
Guru
7. 10. 2010   #17
-
0
-

Tak konzole bude mít jinou kódovací stránku. V okenní aplikaci používej Unicode a máš po starostech :). Jinak používám Visual Studio a jsem maximálně spokojený.

Nahlásit jako SPAM
IP: 195.189.142.–
zdenda
~ Anonymní uživatel
257 příspěvků
8. 10. 2010   #18
-
0
-

Loli, bez urážky, ale problém nebude v CB, ty prostě nemáš ponětí, co děláš a tím to bude.

Nahlásit jako SPAM
IP: 213.211.51.–
Loli
~ Anonymní uživatel
33 příspěvků
9. 10. 2010   #19
-
0
-

Tak jsem si stáhl Microsoft Visual c++ 2010

Měl bych jeden problém. Když chci vytvořit "resource.rc" a v něm MAINMENU (menu aplikace) tak to hází chyby.

spíš je chyba u mě ale nemaj se tam nainstalovat ještě nějaký patche?

Log:



1>------ Build started: Project: API, Configuration: Debug Win32 ------
1>
1>resource.rc(4): error RC2135: file not found: 40008
1>
1>
1>resource.rc(6): error RC2164: unexpected value in RCDATA
1>
1>
1>resource.rc(9): error RC2135: file not found: MENUITEM
1>
1>
1>resource.rc(10): error RC2135: file not found: MENUITEM
1>
1>
1>resource.rc(11): error RC2135: file not found: END
1>
1>
1>resource.rc(13): error RC2135: file not found: Aplikaci
1>
1>
1>resource.rc(14): error RC2135: file not found: END
1>
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========


Zde je zdroják resource.rc



#include "afxres.h"
#include "zdroje_private.h"
MAINMENU MENU DISCARDABLE
BEGIN
POPUP "&Něco"

BEGIN
MENUITEM "&Něco", IDM_NECO
MENUITEM "&Něco", IDM_NECO2
END

MENUITEM "&O Aplikaci", IDM_ABOUT
END


Zde je zdroják zdroje_private.h



#define MAINMENU 40008
#define IDM_ABOUT 40010
#define IDM_NECO 40011
#define IDM_NECO2 40011


Zde je zdroják main.cpp



#include <windows.h>
#include <iostream>
#include <string>
#include <cctype>
#include <fstream>
#include <cstring>
#include <cstdlib>
#include <time.h>
#include <math.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <winuser.h>
#include <clocale>
#include <locale.h>
#include <ctype.h>
#include <Vfw.h>
#include <conio.h>
#include <Lmcons.h>
#include "zdroje_private.h"
using namespace std;

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)
{
TCHAR szAppName[] = TEXT("Pokusné okno");
HWND hWnd;
MSG msg;
WNDCLASSEX wc;

wc.cbSize = sizeof(wc);
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = NULL;
wc.hIconSm = NULL;
wc.hCursor = NULL;
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = MAKEINTRESOURCE(MAINMENU);
wc.lpszClassName = szAppName;

RegisterClassEx(&wc);

hWnd = CreateWindowEx(0,szAppName,
szAppName,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
800,
650,
NULL,
NULL,
hInstance,NULL);
ShowWindow(hWnd, iCmdShow);
UpdateWindow(hWnd);

while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return msg.wParam;


}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd, message, wParam, lParam);
}



Můžete help?

Nahlásit jako SPAM
IP: 78.80.70.–
liborb
~ Redaktor
+18
Guru
9. 10. 2010   #20
-
0
-

Ty chyby moc smyslu nedávají. Zkus ten resource soubor odebrat a pak zase přidat do projektu. Všechno jinak vypadá, že by to mělo být ok.

Nahlásit jako SPAM
IP: 195.189.142.–
Loli
~ Anonymní uživatel
33 příspěvků
10. 10. 2010   #21
-
0
-

Výsledek je stejný jako na screenu s tim rozdílem žě neumí #include "afxres.h"
A tobě to funguje OK (rc soubory)?

Nahlásit jako SPAM
IP: 78.80.70.–
liborb
~ Redaktor
+18
Guru
10. 10. 2010   #22
-
0
-

To tvoje nemám teď šanci zkusit (až zítra :)), ale jinak mě resource funguje. Hoď se kompletní projekt a uvidíme. A když to neumí afxres.h, tak ho dej pryč, na nic ho nepotřebuješ - všechny ID si můžeš definovat sám.

Nahlásit jako SPAM
IP: 195.189.142.–
Loli
~ Anonymní uživatel
33 příspěvků
10. 10. 2010   #23
-
0
-

Už jsem to vyřešil. Musel jsem to udělat následovně, jinak to totiž nejde (u mě).

resource.rc jsem musel upravit takhle:



#define MAINMENU 40008
#define IDM_ABOUT 40010
#define IDM_NECO 40011
#define IDM_NECO2 40011

MAINMENU MENU DISCARDABLE
BEGIN
POPUP "&Něco"

BEGIN
MENUITEM "&Něco", IDM_NECO
MENUITEM "&Něco", IDM_NECO2
END


MENUITEM "&O Aplikaci", IDM_ABOUT
END


Díky

Nahlásit jako SPAM
IP: 78.80.70.–
liborb
~ Redaktor
+18
Guru
10. 10. 2010   #24
-
0
-

Takhle by to bylo nepraktické. Proto jsou ID definované v jednom h souboru, aby si to nemusel definovat extra pro rc a extra na použití v programu. Podle všeho by mělo stačit includovat zdroje_private.h, protože je to vlastně celý jeho obsah.

Nahlásit jako SPAM
IP: 195.189.142.–
Loli
~ Anonymní uživatel
33 příspěvků
10. 10. 2010   #25
-
0
-

Ano máš pravdu že je to nepraktické ale pokud includuji zdroje_private.h tak to hlásí "file not found".

Nahlásit jako SPAM
IP: 78.80.70.–
Loli
~ Anonymní uživatel
33 příspěvků
10. 10. 2010   #26
-
0
-

Předchzí příspěvek beru zpět. Nevím proč , ale najednou to jde :D.

Nahlásit jako SPAM
IP: 78.80.70.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 56 hostů

Podobná vlákna

Win32 API — založil survik1

Kniha o Win32 Api — založil petris123

Dialog ve Win32 API — založil david v.

Win32 API - zdroje — založil Rišo Kakaš

Win32 api Font — založil Porcepoque

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý