MFC a Win32 API

Programovacie jazyky, rady, poradňa...
psm
Amateur
Amateur
Príspevky: 29
Registrovaný: 04 apr 2010, 0:59

MFC a Win32 API

Príspevok od používateľa psm »

Caute, da sa toto macro: ON_MESSAGE(WTM_CITAJ_DATA,OnMessage) z MFC kniznice nejak zapisat pre normalnu Wn32 aplikaciu? Sprava WTM_CITAJ_DATA je z DLL, ktore vyuziva dany program a tu vyuzivam aj ja. Ta sprava WTM_CITAJ_DATA je vysielana, ked snimac prijme data. A potom sa zobrazuju tie prijate data pomocou:
c-ice
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 475
Registrovaný: 04 mar 2008, 15:18
Kontaktovať používateľa:

Re: MFC

Príspevok od používateľa c-ice »

skus pisat konkretny problemi ale najprv ich skus vygooglit :smt006
alpha a omega => http://msdn.microsoft.com/en-us/library ... 80%29.aspx
tu mas na vsetko priklady ukazky kodov niekde su tam aj videa referenciu ku vsetkym ich veciam staci pouzit vyhladavanie na stranke
psm
Amateur
Amateur
Príspevky: 29
Registrovaný: 04 apr 2010, 0:59

Re: MFC a Win32 API

Príspevok od používateľa psm »

Google uz som presiel cely, az som sa skoro zgooglil. :D
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Re: MFC a Win32 API

Príspevok od používateľa chrono »

A s čím tam máš problém? (lebo tak, ako to píšeš by to vyzerať mohlo, až na to, že by tam nebolo to WPARAM a LPARAM)
psm
Amateur
Amateur
Príspevky: 29
Registrovaný: 04 apr 2010, 0:59

Re: MFC a Win32 API

Príspevok od používateľa psm »

No prave s tym WPARAM a LPARAM. A myslis, teda ze je to spravne? Teda, ze to je spravne prevedene? A ako by som prosim ta mohol vyriesit to WPARAM a LPARAM? Lebo ono ta funkcia OnMessage, to zrejme musi obsahovat.
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Re: MFC a Win32 API

Príspevok od používateľa chrono »

To volanie funkcie bude OnMessage(wParam, lParam);
psm
Amateur
Amateur
Príspevky: 29
Registrovaný: 04 apr 2010, 0:59

Re: MFC a Win32 API

Príspevok od používateľa psm »

Nejde to, lebo to vypisuje chyby:
1>main.obj : error LNK2019: unresolved external symbol "void __cdecl OnMessage(unsigned int,long)" (?OnMessage@@YAXIJ@Z) referenced in function "int __stdcall DialogProc(struct HWND__ *,unsigned int,unsigned int,long)" (?DialogProc@@YGHPAUHWND__@@IIJ@Z)
1> fatal error LNK1120: 1 unresolved externals
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Re: MFC a Win32 API

Príspevok od používateľa chrono »

Funkciu OnMessage máš v tom istom súbore?
psm
Amateur
Amateur
Príspevky: 29
Registrovaný: 04 apr 2010, 0:59

Re: MFC a Win32 API

Príspevok od používateľa psm »

Teraz neviem ako to myslis, lebo sak to mam najskor deklarovane a potom som to vlozil do toho DialogProc.

//autoeditácia príspevku (30 Apr 2010, 23:19)
Uz som zisitil, som nemal deklarovanu tu funkciu. Tak som ju deklaroval a vyzera to takto a frci to. :)
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Re: MFC a Win32 API

Príspevok od používateľa chrono »

psm napísal:A chcem sa este opytat, to spracovanie spravy mam napisane spravne hned za switch (uMsg)?
Netuším, čo presne tým myslíš.
psm napísal:Takto by to neslo?
Išlo by to tak, ale ja osobne by som to tam asi neopakoval. Buď tam dáš niečo ako:

Kód: Vybrať všetko

case IDC_RADIO1:
case IDC_RADIO2:
case IDC_RADIO3:
case IDC_RADIO4:
                    if(IsDlgButtonChecked(hlok, wParam) == BST_CHECKED)
                     {
                     m_commPort = wParam - IDC_RADIO1;
                     CheckDlgButton(hlok, wParam, BST_UNCHECKED);
                     }
                     else
                     {   
                     CheckDlgButton(hlok, wParam, BST_CHECKED);
                     }
                     break;
(ale tie IDC_RADIO musia mať hodnoty zoradené vzostupne a musia sa zväčšovať o 1)

Prípadne to môžeš celé dať do funkcie, potom tam môžeš zavolať tú funkciu štyri krát...
psm
Amateur
Amateur
Príspevky: 29
Registrovaný: 04 apr 2010, 0:59

Re: MFC a Win32 API

Príspevok od používateľa psm »

Dakujem ti velmi pekne. A tento vyraz: wParam - IDC_RADIO1 mi bude urcite davat hodnoty od 0 po 3?

A chcem sa este opytat, ked chcem po kazdom nacitani udajov ukladat tie data do txt pod seba a po urcitom pocte zapisov ten subor vymazat a potom znovu otvorit, tak to mozem zapisat takto:
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Re: MFC a Win32 API

Príspevok od používateľa chrono »

psm napísal:Dakujem ti velmi pekne. A tento vyraz: wParam - IDC_RADIO1 mi bude urcite davat hodnoty od 0 po 3?
Ak majú tie konštanty správne hodnoty, tak bude (a teda ak má ďalšia konštanta hodnotu +1, tak to fungovať bude).
psm napísal:...
Asi by bolo dobré ten súbor otvoriť len raz (napr. pri spustení programu) a potom v OnMessage zavolať nejakú pomocnú funkciu, v ktorej bude uloženie toho reťazca do súboru. V tej funkcii si nadefinuješ statickú premennú, v ktorej budeš mať počet vložených reťazcov (a teda niečo ako static int i = 0;).
Po každom uložení reťazca si obsah tej premennej zvýšiš a ak dosiahne určitú hodnotu (tam by som asi dal konštantu) ten súbor zatvoríš a vytvoríš nový.
Na konci programu ten súbor samozrejme zatvoríš.
psm
Amateur
Amateur
Príspevky: 29
Registrovaný: 04 apr 2010, 0:59

Re: MFC a Win32 API

Príspevok od používateľa psm »

Jaj, vlastne hej, ja ked ten subor zatvorim a otvorim novy, tak sa to vlastne nahradi. Takze vlastne po kazdom zatvoreni programu sa ten subor prepise, nie? Tak potom zistujem, ze mi vlastne staci spravit, aby sa ten subor uzavrel po ukonceni programu. Ale ako by sa prosim ta dalo spravit, aby po zmacknuti tlacitka "Nacitat data" alebo "_" sa ten program skryl iba do spodnej listy. Aby ho niekto nechtiac nevypol a potom by bolo zle, lebo mne sa budu tie udaje z textaku nacitavat po urcitom case a nie hned ked sa daju do txt.


A da sa to nejak zistit, ci tie konstanty maju spravne hodnoty? Teda myslim okrem vyskusania programu v akcii :D lebo to este nemozem.
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Re: MFC a Win32 API

Príspevok od používateľa chrono »

Skôr som myslel niečo takéto:

Kód: Vybrať všetko

void OpenFile(void)
{
	subor = fopen("c:\\...\\....txt", "rw");
}

void CloseFile(void)
{
	fclose(subor);
}

void WriteValue(FILE *subor, DWORD value)
{
	static int i = 0;
	time_t t = time(NULL);
	struct tm * tmp = localtime(&t);
	
	fprintf(subor, "%u\t", value);
	fprintf(subor, "%02d.%02d.%04d %02d:%02d:%02d""\n",
	tmp->tm_mday, tmp->tm_mon+1, tmp->tm_year+1900, tmp->tm_hour, tmp->tm_min, tmp->tm_sec);
	
	i++;
	
	if (i > 50) {
		CloseFile();
		OpenFile();
	}
}

void OnMessage(WPARAM wParam,LPARAM lParam)
{
	DWORD *LRM=(DWORD*)lParam;
	WriteValue(LRM[0]);
}

INT_PTR CALLBACK DialogProc(HWND hlok, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch ( uMsg ) {
		case WTM_CITAJ_DATA:
			OnMessage(wParam, lParam);
			break;
		case WM_COMMAND:
			switch ( LOWORD(wParam) ) {
				case IDCANCEL:
					EndDialog(hlok, IDCANCEL);
					break;

	}
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nShow)
{
	OpenFile();
	int ret = DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, (DLGPROC)DialogProc);
	CloseFile();
	return ret;
}
Správne hodnoty sú čokoľvek, čo po sebe nasleduje s krokom +1 (a teda napr. 101, 102, 103, 104 alebo 665, 666, 667, 668 ...).

To, aby ten program mal ikonu pri hodinách a aby sa nezobrazovalo hlavné okno sa urobiť dá (pozri si nejaké informácie o funkcii Shell_NotifyIcon).
psm
Amateur
Amateur
Príspevky: 29
Registrovaný: 04 apr 2010, 0:59

Re: MFC a Win32 API

Príspevok od používateľa psm »

Jaj diky, uz si ma predbehol a ten program, ktory si mi upravil, tam sa vlastne ten subor prepise az po tych 50 razoch a pri vypnuti sa neprepise nie?
A vidis, tie hodnoty RADIO mam nastavene zle, lebo RADIO1 ma hodnotu 1000 a ostatne od 1006 do 1008. Takze to teraz musim upravit v tom ResourceEditore, inak to asi nepojde, co?
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Re: MFC a Win32 API

Príspevok od používateľa chrono »

Pri vypnutí sa neprepíše, ale prepíše sa pri nasledujúcom zapnutí. Naozaj ten súbor chceš prepisovať?

Tie konštanty IDC_RADIO1...IDC_RADIO4 nemáš v nejakom hlavičkovom súbore? Ak áno (a ak aj v .rc používaš tie konštanty), tak nie je problém to zmeniť (a pridať si tam poznámku, že tie čísla musia nasledovať za sebou). Prípadne tam môžeš dať funkciu a budeš ju tam volať 4 krát (potom bude jedno, čo obsahujú tie konštanty).
psm
Amateur
Amateur
Príspevky: 29
Registrovaný: 04 apr 2010, 0:59

Re: MFC a Win32 API

Príspevok od používateľa psm »

No tie RADIO hodnoty som uz pomenil, sak to je dobre aj hentak. A ja neviem, ci je to potrebne, ja mam druhu aplikaciu v Oracle a ta mi nacitava data z toho textaku a vklada ich do tabulky, tak neviem, ale to by mozno az tak nevadilo. Ale z toho hladiska, ze tam musia byt tie data dlhsiu dobu, lebo ten program ich vybera z toho txt iba v urcitych intervaloch, tak by bolo mozno lespie, aby sa to neprepisovalo. Neviem, co by si poradil ty?
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Re: MFC a Win32 API

Príspevok od používateľa chrono »

Ty musíš vedieť, či sa to má prepisovať alebo nie. :)
psm
Amateur
Amateur
Príspevky: 29
Registrovaný: 04 apr 2010, 0:59

Re: MFC a Win32 API

Príspevok od používateľa psm »

Ja by som povedal, ze ked to prepise ten subor po nasledujucom zapnuti, tak je to uplne vyhovujuce. :) Ale len tak preistotu, keby som chcel aby sa to neprepisovalo, tak co mam spravit? Lebo vzdy ked tam bude to fopen a fclose, tak to prepise, nie? A co sa stane v pripade, ze nastane nejaka chyba pri nacitani udajov, tak sa pokasle iba sprava WTM_CITAJ_DATA ale s programom to nespravi nic, ked tam nemam nic nastavene a pri dalsom nacitani uz bude vsetko ok, nie?
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: MFC a Win32 API

Príspevok od používateľa audiotrack »

nie, neprepíše. To záleží od flagov s akými ten súbor otváraš. Keby ho nechceš prepisovať tak ho otvor iba na r (čítanie) alebo na a (dopisovanie). Je to tvoja vec, ty sa pýtaš nie na veci ohľadom zdrojáku ale návrhu a to mi neviem čo a ako ti viac vyhovuje. Si musíš sám zvoliť
A keď nastane chyba pri načítaní, tak sa to dá odchytiť vo výnimke a príslušne spracovať. Zase je to iba vec návrhu ako sa k tomu postavíš a či potrebuješ takéto chyby odchytávať (a či vôbec nastávajú často alebo nie..)
Napísať odpoveď