| | |
windows api help
Please support our C++ advertiser: Intel Parallel Studio Home
![]() |
•
•
Join Date: Sep 2007
Posts: 56
Reputation:
Solved Threads: 0
I'm working on a simple program. It will compile,but whenever I press the delete button a message pops up and says it needs to close. I looked at the error details and It's error code was 0xc0000005.
This is where I think the problem is:
This is the whole code. I'm sorry for posting all of it, but the problem might be somewhere else.
Thanks for the help.
This is where I think the problem is:
C++ Syntax (Toggle Plain Text)
for(i= 0; i < NumOfItems; i++) { ListView_GetItemText(hWndListView, i, 0, text, 256); ListView_GetItemText(hWndListView, i, 1, text2, 256); string s = text; ListViewText[i][0] = s; string s2 = text2; ListViewText[i][1] = s2; }
C++ Syntax (Toggle Plain Text)
#define _WIN32_IE 0x600 #include "resource.h" #include <windows.h> #include <commctrl.h> #include <string> #include <vector> HWND hWndButton2; HWND hWndButton; HWND hWndButton3; HWND hWndEditBox; HWND hWndEditBox2; HFONT hFont; HWND hWnd; HWND hWndListView; LVCOLUMN LvCol; // Make Coluom struct for ListView LVITEM LvItem; int iSelect = 0; int i; int NumOfItems; /* Declare Windows procedure */ LRESULT CALLBACK WindowProcedure(HWND, UINT, WPARAM, LPARAM); /* Make the class name into a global variable */ char szClassName[] = "WindowsApp"; int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil) { MSG messages; /* Here messages to the application are saved */ WNDCLASSEX wincl; /* Data structure for the windowclass */ /* The Window structure */ wincl.hInstance = hThisInstance; wincl.lpszClassName = szClassName; wincl.lpfnWndProc = WindowProcedure; /* This function is called by windows */ wincl.style = CS_DBLCLKS; /* Catch double-clicks */ wincl.cbSize = sizeof(WNDCLASSEX); /* Use default icon and mouse-pointer */ wincl.hIcon = LoadIcon(NULL, IDI_APPLICATION); wincl.hIconSm = LoadIcon(NULL, IDI_APPLICATION); wincl.hCursor = LoadCursor(NULL, IDC_ARROW); wincl.lpszMenuName = NULL; /* No menu */ wincl.cbClsExtra = 0; /* No extra bytes after the window class */ wincl.cbWndExtra = 0; /* structure or the window instance */ /* Use Windows's default color as the background of the window */ wincl.hbrBackground = (HBRUSH)COLOR_BACKGROUND; /* Register the window class, and if it fails quit the program */ if (!RegisterClassEx(&wincl)) return 0; /* The class is registered, let's create the program*/ hWnd = CreateWindowEx(0, /* Extended possibilites for variation */ szClassName, /* Classname */ "To-do list", /* Title Text */ WS_SYSMENU | WS_MINIMIZEBOX, /* default window */ CW_USEDEFAULT, /* Windows decides the position */ CW_USEDEFAULT, /* where the window ends up on the screen */ 347, /* The programs width */ 266, /* and height in pixels */ HWND_DESKTOP, /* The window is a child-window to desktop */ NULL, /* No menu */ hThisInstance, /* Program Instance handler */ NULL /* No Window Creation data */ ); /* Make the window visible on the screen */ ShowWindow(hWnd, nFunsterStil); /* Run the message loop. It will run until GetMessage() returns 0 */ while (GetMessage(&messages, NULL, 0, 0)) { /* Translate virtual-key messages into character messages */ TranslateMessage(&messages); /* Send message to WindowProcedure */ DispatchMessage(&messages); } /* The program return-value is 0 - The value that PostQuitMessage() gave */ return messages.wParam; } /* This function is called by the Windows function DispatchMessage() */ LRESULT CALLBACK WindowProcedure(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) /* handle the messages */ { case WM_CREATE: { //Add Button HINSTANCE hInstance = (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE); hWndButton = CreateWindowEx( 0, "BUTTON", "ADD", WS_VISIBLE | WS_CHILD, 250, 0, 90, 20, hWnd, (HMENU)IDB_BUTTON, hInstance, NULL); //font hFont = CreateFont(0, 0, 0, 0, 0, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FF_MODERN, "Courier New"); //date box hWndEditBox = CreateWindow( "EDIT", "", WS_VISIBLE | WS_CHILD | ES_AUTOHSCROLL, 0, 0, 70, 20, hWnd, (HMENU)IDC_EDITBOX_TEXT, (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE), NULL); //item button hWndEditBox2 = CreateWindow("EDIT", "", WS_VISIBLE | WS_CHILD | ES_AUTOHSCROLL, 75, 0, 175, 20, hWnd, (HMENU)IDC_EDITBOX_TEXT2, (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE), NULL); SendMessage(hWndEditBox, WM_SETFONT, (WPARAM)hFont, TRUE); SendMessage(hWndEditBox2, WM_SETFONT, (WPARAM)hFont, TRUE); //listview hWndListView = CreateWindowEx( 0L, WC_LISTVIEW, "", WS_VISIBLE | WS_CHILD | LVS_REPORT, 0, 21, 340, 190, hWnd, (HMENU)ID_LISTVIEW, hInstance, NULL); ListView_SetExtendedListViewStyle(hWndListView, LVS_EX_FULLROWSELECT); //Delete button hWndButton2 = CreateWindowEx( 0, "BUTTON", "Delete", WS_VISIBLE | WS_CHILD, 0, 213, 90, 20, hWnd, (HMENU)IDB_BUTTON2, hInstance, NULL); //delete all btn hWndButton3 = CreateWindowEx( 0, "BUTTON", "Delete All", WS_VISIBLE | WS_CHILD, 91, 213, 90, 20, hWnd, (HMENU)IDB_BUTTON3, hInstance, NULL); // Here we put the info on the Coulom headers // this is not data, only name of each header we like memset(&LvCol, 0, sizeof(LvCol)); // Reset Coluom LvCol.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM; // Type of mask LvCol.cx = 0x0; // width between each coloum LvCol.pszText = "Date"; // First Header LvCol.cx = 0x40; // Inserting Couloms as much as we want SendMessage(hWndListView, LVM_INSERTCOLUMN, 0, (LPARAM) &LvCol); // Insert/Show the coloum LvCol.cx = 0x110; LvCol.pszText = "Item"; SendMessage(hWndListView, LVM_INSERTCOLUMN, 2, (LPARAM) &LvCol); } break; case WM_DESTROY: PostQuitMessage(0); /* send a WM_QUIT to the message queue */ break; case WM_COMMAND: { switch (LOWORD(wParam)) { case IDB_BUTTON: { switch (HIWORD(wParam)) { case BN_CLICKED: int TxtSize = GetWindowTextLength(hWndEditBox) + 1; char *Entry = new char[TxtSize]; GetWindowText(hWndEditBox, Entry, TxtSize); int TxtSize2 = GetWindowTextLength(hWndEditBox2) + 1; char *Entry2 = new char[TxtSize2]; GetWindowText(hWndEditBox2, Entry2, TxtSize2); LvItem.mask = LVIF_TEXT; // Text Style LvItem.cchTextMax = 256; // Max size of test LvItem.iItem = 0; // choose item LvItem.iSubItem = 0; // Put in first coluom LvItem.pszText = Entry; // Text to display (can be from a char variable) (Items) SendMessage(hWndListView, LVM_INSERTITEM, 0, (LPARAM) &LvItem); // Send to the Listview // Insert subitem LvItem.iSubItem = 1; LvItem.pszText = Entry2; SendMessage(hWndListView, LVM_SETITEM, 0, (LPARAM) &LvItem); // Enter text to SubItems delete [] Entry; delete [] Entry2; NumOfItems++; break; } } break; case IDB_BUTTON2: { switch (HIWORD(wParam)) { case BN_CLICKED: iSelect=SendMessage(hWndListView,LVM_GETNEXTITEM,-1,LVNI_FOCUSED); SendMessage(hWndListView, LVM_DELETEITEM, iSelect, 0); NumOfItems--; using namespace std; vector<string>* ListViewText; ListViewText = new vector<string>(); char *text = new char[256]; char *text2 = new char[256]; for(i= 0; i < NumOfItems; i++) { ListView_GetItemText(hWndListView, i, 0, text, 256); ListView_GetItemText(hWndListView, i, 1, text2, 256); string s = text; ListViewText[i][0] = s; string s2 = text2; ListViewText[i][1] = s2; } delete ListViewText; delete [] text; delete [] text2; } break; } case IDB_BUTTON3: { switch (HIWORD(wParam)) { case BN_CLICKED: SendMessage(hWndListView, LVM_DELETEALLITEMS, 0, 0); } break; } } return 0; } break; default: /* for messages that we don't deal with */ return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
I think your problem is the way you are using ListViewText array beginning at line 272. This is a better way to do it. Note there is NO dynamic allocation needed and only one character buffer. You are allowed (and encouraged) to reuse data whenever possible and wherever it makes sense.
Note that I have added a couple lines to resize the vector to the correct number of elements. That was one of the main reasons your code did not work -- you were setting strings to non-existant rows and columns. I have not tested this code, but I THINK it will work.
Another problem with the above is: so what? You are putting all the strings in a 2d vector of strings which are immediately destroyed because of where that vector is declared. What do you intend to do with it ?
Note that I have added a couple lines to resize the vector to the correct number of elements. That was one of the main reasons your code did not work -- you were setting strings to non-existant rows and columns. I have not tested this code, but I THINK it will work.
C++ Syntax (Toggle Plain Text)
vector< vector<string> > ListViewText; ListViewText.resize(NumOfItems); char text char[256]; for(i= 0; i < NumOfItems; i++) { ListViewText[i].resize(2); ListView_GetItemText(hWndListView, i, 0, text, 256); ListViewText[i][0] = text; ListView_GetItemText(hWndListView, i, 1, text, 256); ListViewText[i][1] = text; }
Another problem with the above is: so what? You are putting all the strings in a 2d vector of strings which are immediately destroyed because of where that vector is declared. What do you intend to do with it ?
Last edited by Ancient Dragon; Oct 6th, 2007 at 10:34 pm.
Don't PM me with questions -- you might get a nasty PM in response. If you have a question then post it in one of the forums.
![]() |
Similar Threads
- Starting " C " (C)
- Windows API tutorial?? (C++)
- windows api help (C++)
- Windows api (C++)
- Windows API functions to read and write files in C (C)
- Windows Api Tutorial (C++)
Other Threads in the C++ Forum
- Previous Thread: NEED help pls. about linked list
- Next Thread: Track of the cost and calories for a lunch.
| Thread Tools | Search this Thread |
Tag cloud for C++
api application array arrays assignment based beginner binary bitmap c++ c/c++ calculator char char* class classes code coding compile compiler console conversion convert count data database delete developer dll dynamiccharacterarray email encryption error file format forms fstream function functions game generator getline graph homeworkhelp homeworkhelper iamthwee ifstream image input int java lib list loop looping loops map math matrix memory multidimensional multiple newbie news node number numbertoword output parameter pointer problem program programming project proxy python random read recursion recursive reference rpg sorting string strings template text tree url variable vector video visual visualstudio win32 windows winsock word wordfrequency wxwidgets






