Έχω φτιάξει ένα πρόγραμμα..το οποίο απλά διαβάζει ένα αρχείο και μετά εμφανίζει μερικά στοιχεία στην οθόνη με την εντολή TextOut.Επιπλέον υπάρχει και ένα "χρονόμετρο" το οποίο κάθε 1sec διαβάζει το αρχείο και ανανεώνει τα στοιχεία...Το πρόγραμμα λειτουργεί μία χαρά χωρίς κάποιο πρόβλημα.Ωστόσο, αν το αφήσω ανοιχτό για λίγη ώρα και το χρησιμοποιώ τότε ξαφνικά απλά κολλάει και πρέπει να το κλείσω και να το ανοίξω πάλι. Έχει κανείς καμιά ιδέα γιατί μπορεί να συμβαίνει αυτό?? Αν χρειάζεται μπορώ να παραθέσω τον κώδικα...ο λόγος που δεν το κάνω από την αρχή είναι επειδή το πρόγραμμα λειτουργεί κανονικά.
Ευχαριστώ:p
Καλο θα ηταν να το ποσταρεις. Αυτο μπορει να συμβει για 2131231231312 λογους.
Λογικα εχει μπυκοσει το message queue.
Τεσπα, δες αυτο (http://msdn.microsoft.com/en-us/library/windows/desktop/aa365261(v=vs.85).aspx)
Αυτός είναι ο κώδικας...
Το ξέρω ότι δεν είναι και πολύ καλός αλλά δεν ξέρω και πολλά πράγματα :)
//Include statements for the code
#include <Windows.h>
#include <stdlib.h>
#include <string.h>
#include "Decode.h"
static TCHAR WindowName[] = _T("Egnlish");
bool see = true;
bool lAdmin = false;
void PrintText(HWND hWnd){
HDC hdc;
TCHAR buffer[10];
hdc = GetDC(hWnd);
SetTextColor(hdc,RGB(0,0,0));
SetBkColor(hdc,RGB(129,129,129));
CheckData();
for(int i=0;i<5;i++){
switch(i){
case 0:{TextOut(hdc,200,24+20*i,_T("Συνολικά Χρήματα"),18); break;}
case 1:{TextOut(hdc,200,24+20*i,_T("Συνολικά Έξοδα"),14); break;}
case 2:{TextOut(hdc,200,24+20*i,_T("Δίδακτρα"),8); break;}
case 3:{TextOut(hdc,200,24+20*i,_T("Εικονικά Χρήματα"),18); break;}
case 4:{TextOut(hdc,200,24+20*i,_T("Βιβλία"),6);
TextOut(hdc,200,24+20*(i+1),_T("Περισεύουν"),10);
_itot(MoneySum-MoneySpent,buffer,10);
TextOut(hdc,350,24+20*(i+1),buffer,_tcslen(buffer));break;}
}
_itot(ReadFile(i),buffer,10);
TextOut(hdc,350,24+20*i,buffer,_tcslen(buffer));
}
SetTextColor(hdc,RGB(165,42,42));
if(admin==true){TextOut(hdc,200,5,_T("Administrator"),13);}
else{TextOut(hdc,200,5,_T("Please Log in"),13);}
ReleaseDC(hWnd,hdc);
}
//Window-procedure function
LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam){
PAINTSTRUCT ps;
HDC hdc;
TCHAR greeting[] = _T("Αγγλικά");
TCHAR buffer[10];
int xPos,yPos;
POINT CurCord;
HFONT hFontTitle = CreateFont(24, 20, (10*45), (10*45), FW_THIN, FALSE, FALSE, FALSE,
ANSI_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
FF_DONTCARE, _T("Times New Roman"));
HFONT hFontMain = CreateFont(12,17,0,0,0,0,0,0,00,0,0,0,0,_T("MS Sans Serif"));
switch (message){
case WM_PAINT:{
CheckFile();
LoadData();
PrintText(hWnd);
hdc = BeginPaint(hWnd, &ps);
SetBkColor(hdc,RGB(129,129,129));
SetTextColor(hdc,RGB(165,42,42));
SelectObject(hdc,hFontTitle);
TextOut(hdc,5,120,greeting,_tcslen(greeting));
EndPaint(hWnd,&ps);
break;}
case WM_MOUSEMOVE:{
RECT rec;
GetWindowRect(hWnd,&rec);
GetCursorPos(&CurCord);
TCHAR buffer[10];
_itot(CurCord.x,buffer,10);
if(CurCord.x >=(rec.left+350)){
SetCursor(LoadCursor(NULL,IDC_HAND));}
HDC hdc;
hdc = GetDC(hWnd);
TextOut(hdc,5,5,buffer,_tcslen(buffer));
ReleaseDC(hWnd,hdc);
break;}
case WM_LBUTTONDOWN:{
RECT rec;
GetWindowRect(hWnd,&rec);
GetCursorPos(&CurCord);
if(CurCord.x >=(rec.left+350)){
}
break;}
case WM_LBUTTONUP:{
PrintText(hWnd);
break;}
case WM_RBUTTONDOWN:{
if(lAdmin==true){admin=true;}
break;}
case WM_RBUTTONUP:{
break;}
case WM_DESTROY:{
PostQuitMessage(0);
break;}
default:{
return DefWindowProc(hWnd,message,wParam,lParam);
break;}
}
}
//Main function for Win32
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
LPSTR lpCmdLine,int nCmdShow){
//WNDCLASSEX structure
WNDCLASSEX wc;
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL,IDI_INFORMATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName = WindowName;
wc.hIconSm = LoadIcon(NULL,IDI_INFORMATION);
//Class Reginster
if (!RegisterClassEx(&wc)){
MessageBox(NULL,_T("Call RegistrationClassEx failed!"),
_T("Win32 Guided Tour"),NULL);
return 1;
}
HWND hWnd = CreateWindow(WindowName,_T("Αγγλικά"),
WS_OVERLAPPEDWINDOW,
800,
50,
500,250,
NULL,NULL,hInstance,NULL);
//Check if window created
if(!hWnd){
MessageBox(NULL,_T("Call to CreateWindow failed!"),
_T("Wind32 Guided Tour"),NULL);
return 1;
}
//Display Window
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
MSG msg;
while (GetMessage(&msg,NULL,0,0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int) msg.wParam;
}
hFontMain, hFontText καντα global, και φτιαχτα (createfont..) στο wm_create message. Α διεγραψε τα (DeleteObject) στο wm_destroy.