MFC a Win32 API
MFC a Win32 API
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:
Re: MFC
skus pisat konkretny problemi ale najprv ich skus vygooglit
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
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
Re: MFC a Win32 API
Google uz som presiel cely, az som sa skoro zgooglil. 
Re: MFC a Win32 API
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)
Re: MFC a Win32 API
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.
Re: MFC a Win32 API
To volanie funkcie bude OnMessage(wParam, lParam);
Re: MFC a Win32 API
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
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
Re: MFC a Win32 API
Funkciu OnMessage máš v tom istom súbore?
Re: MFC a Win32 API
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.
//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.
Re: MFC a Win32 API
Netuším, čo presne tým myslíš.psm napísal:A chcem sa este opytat, to spracovanie spravy mam napisane spravne hned za switch (uMsg)?
Išlo by to tak, ale ja osobne by som to tam asi neopakoval. Buď tam dáš niečo ako:psm napísal:Takto by to neslo?
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;Prípadne to môžeš celé dať do funkcie, potom tam môžeš zavolať tú funkciu štyri krát...
Re: MFC a Win32 API
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:
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:
Re: MFC a Win32 API
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:Dakujem ti velmi pekne. A tento vyraz: wParam - IDC_RADIO1 mi bude urcite davat hodnoty od 0 po 3?
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;).psm napísal:...
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íš.
Re: MFC a Win32 API
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
lebo to este nemozem.
A da sa to nejak zistit, ci tie konstanty maju spravne hodnoty? Teda myslim okrem vyskusania programu v akcii
Re: MFC a Win32 API
Skôr som myslel niečo takéto:
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).
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;
}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).
Re: MFC a Win32 API
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?
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?
Re: MFC a Win32 API
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).
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).
Re: MFC a Win32 API
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?
Re: MFC a Win32 API
Ty musíš vedieť, či sa to má prepisovať alebo nie. 
Re: MFC a Win32 API
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
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
Re: MFC a Win32 API
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..)
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..)