Well...do you guys can help me on my code...please...I wanna help my dad...
Here's your Dad's meds GUI database. You'll have to get an icon for IDI_ICON1. Also, you'll have to finish the EDIT option.
It doesn't actually update the Listview. So, you'll have to figure that one out. Please test thoroughly before your Dad uses it.
Code:
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by medicine.rc
//
#define IDC_DIALOG 101
#define IDI_ICON1 102
#define IDD_EDIT_DIALOG 103
#define IDC_LIST 1000
#define IDC_DELSELITEM 1001
#define IDC_ADD_NAME 1002
#define IDC_ADD_SERIAL 1003
#define IDC_ADDITEM 1004
#define IDC_SAVE 1005
#define IDC_ADDDESCRIPTION 1006
#define IDC_ADD_DESCRIPTION 1007
#define IDC_EDIT_NAME 1008
#define IDC_EDIT_SERIAL 1009
#define IDC_EDIT_DESCRIPTION 1010
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 109
#define _APS_NEXT_COMMAND_VALUE 40006
#define _APS_NEXT_CONTROL_VALUE 1014
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
Code:
// Microsoft Visual C++ generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END
3 TEXTINCLUDE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDC_DIALOG DIALOGEX 0, 0, 504, 142
STYLE DS_SETFONT | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION |
WS_SYSMENU
CAPTION "Dad's Medicine database"
FONT 8, "MS Sans Serif", 0, 0, 0x1
BEGIN
CONTROL "List1",IDC_LIST,"SysListView32",LVS_REPORT |
LVS_EDITLABELS | WS_BORDER | WS_TABSTOP,2,10,271,116
PUSHBUTTON "Delete Selected Item (row)",IDC_DELSELITEM,301,23,103,
17,0,WS_EX_STATICEDGE
EDITTEXT IDC_ADD_NAME,290,88,53,12,ES_AUTOHSCROLL | NOT WS_BORDER,
WS_EX_STATICEDGE
EDITTEXT IDC_ADD_SERIAL,360,88,53,12,ES_AUTOHSCROLL | NOT
WS_BORDER,WS_EX_STATICEDGE
PUSHBUTTON "Add item",IDC_ADDITEM,290,105,44,15,0,WS_EX_STATICEDGE
PUSHBUTTON "Save Record(s)",IDC_SAVE,301,50,103,15,0,
WS_EX_STATICEDGE
LTEXT "Name",IDC_STATIC,292,76,43,8
LTEXT "Key/Serial",IDC_STATIC,360,76,43,8
EDITTEXT IDC_ADD_DESCRIPTION,428,88,53,12,ES_AUTOHSCROLL | NOT
WS_BORDER,WS_EX_STATICEDGE
LTEXT "Description",IDC_STATIC,428,76,43,8
END
IDD_EDIT_DIALOG DIALOGEX 0, 0, 314, 156
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP |
WS_CAPTION | WS_SYSMENU
CAPTION "Edit dialog"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "Update Record",IDOK,17,123,62,14
PUSHBUTTON "Cancel",IDCANCEL,228,122,61,14
LTEXT "Name:",IDC_STATIC,27,19,24,8
LTEXT "Key/Serial:",IDC_STATIC,26,35,38,8
LTEXT "Description:",IDC_STATIC,24,54,43,8
EDITTEXT IDC_EDIT_NAME,75,16,214,14,ES_AUTOHSCROLL
EDITTEXT IDC_EDIT_SERIAL,75,34,214,14,ES_AUTOHSCROLL
EDITTEXT IDC_EDIT_DESCRIPTION,75,52,214,14,ES_AUTOHSCROLL
END
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO
BEGIN
IDC_DIALOG, DIALOG
BEGIN
RIGHTMARGIN, 501
BOTTOMMARGIN, 141
END
IDD_EDIT_DIALOG, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 307
TOPMARGIN, 7
BOTTOMMARGIN, 149
END
END
#endif // APSTUDIO_INVOKED
#endif // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_ICON1 ICON "icon1.ico"
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED
Code:
#include <windows.h>
#include "resource.h"
#include <commctrl.h>
#include <stdio.h>
#define ENDCOLUMN 2
#define NAMELENGTH 55
#define SERIALLENGTH 55
#define DESCRIPTIONLENGTH 55
static HWND hList=NULL;
LVCOLUMN LvCol;
LVITEM LvItem;
LV_DISPINFO lvd;
INT iSelect=0;
INT iGIndex=0;
INT iFlag=0;
HWND hEdit;
BOOL bEscKey=0;
CHAR szTempStr[100];
CHAR tchar;
CHAR szEditNameText[NAMELENGTH];
CHAR szEditSerialText[SERIALLENGTH];
CHAR szEditDescriptionText[DESCRIPTIONLENGTH];
MSG msg;
FILE *f;
struct rec
{
CHAR name[NAMELENGTH], serial[SERIALLENGTH],description[DESCRIPTIONLENGTH];
};
HINSTANCE hInst;
#define WIN32_LEAN_AND_MEAN
LRESULT ProcessCustomDraw (LPARAM lParam)
{
LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)lParam;
switch(lplvcd->nmcd.dwDrawStage)
{
case CDDS_PREPAINT :
return CDRF_NOTIFYITEMDRAW;
case CDDS_ITEMPREPAINT: //Before an item is drawn
{
return CDRF_NOTIFYSUBITEMDRAW;
}
break;
}
return CDRF_DODEFAULT;
}
BOOL CALLBACK Edit( HWND hDlg,
UINT uMessage,
WPARAM wParam,
LPARAM lParam)
{
switch (uMessage)
{
case WM_INITDIALOG:
SetDlgItemText(hDlg, IDC_EDIT_NAME, szEditNameText);
SetDlgItemText(hDlg, IDC_EDIT_SERIAL, szEditSerialText);
SetDlgItemText(hDlg, IDC_EDIT_DESCRIPTION, szEditDescriptionText);
return TRUE;
case WM_COMMAND:
switch(wParam)
{
case IDOK:
EndDialog(hDlg, IDOK);
break;
case IDCANCEL:
EndDialog(hDlg, IDCANCEL);
break;
}
return TRUE;
}
return FALSE;
}
BOOL CALLBACK DialogProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam)
{
SHFILEINFO shFileInfo;
struct rec r = {0};
INT iListViewCount;
switch(Message)
{
case WM_CLOSE:
{
PostQuitMessage(0);
EndDialog(hWnd,0);
}
break;
case WM_NOTIFY:
{
switch(LOWORD(wParam))
{
case IDC_LIST:
LPNMLISTVIEW pnm = (LPNMLISTVIEW)lParam;
if(pnm->hdr.hwndFrom == hList &&pnm->hdr.code == NM_CUSTOMDRAW)
{
SetWindowLong(hWnd, DWL_MSGRESULT, (LONG)ProcessCustomDraw(lParam));
return TRUE;
}
if(((LPNMHDR)lParam)->code == NM_DBLCLK)
{
INT iSlected=0;
iSlected=SendMessage(hList,LVM_GETNEXTITEM,-1,LVNI_FOCUSED);
if(iSlected==-1)
{
MessageBox(hWnd,"No Items in ListView","Error",MB_OK|MB_ICONINFORMATION);
break;
}
memset(&LvItem,0,sizeof(LvItem));
LvItem.mask=LVIF_TEXT;
LvItem.iSubItem=0;
LvItem.pszText=szEditNameText;
LvItem.cchTextMax=256;
LvItem.iItem=iSlected;
SendMessage(hList,LVM_GETITEMTEXT, iSlected, (LPARAM)&LvItem);
LvItem.iSubItem=1;
LvItem.pszText=szEditSerialText;
SendMessage(hList,LVM_GETITEMTEXT, iSlected, (LPARAM)&LvItem);
LvItem.iSubItem=2;
LvItem.pszText=szEditDescriptionText;
SendMessage(hList,LVM_GETITEMTEXT, iSlected, (LPARAM)&LvItem);
if(DialogBox(hInst,MAKEINTRESOURCE(IDD_EDIT_DIALOG),0,(DLGPROC)Edit) == IDOK)
{
MessageBox(NULL, "Here's where we have to update listivew with edited data", "EDIT",MB_OK);
}
}
if(((LPNMHDR)lParam)->code == NM_CLICK)
{
iSelect=SendMessage(hList,LVM_GETNEXTITEM,-1,LVNI_FOCUSED);
if(iSelect==-1)
{
break;
}
iGIndex=iSelect;
iFlag=1;
}
if(((LPNMHDR)lParam)->code == LVN_BEGINLABELEDIT)
{
hEdit=ListView_GetEditControl(hList);
GetWindowText(hEdit, szTempStr, sizeof(szTempStr));
}
if(((LPNMHDR)lParam)->code == LVN_ENDLABELEDIT)
{
INT iIndex;
CHAR szText[255]={0};
tchar = (TCHAR)msg.wParam;
if(tchar == 0x1b)
bEscKey=1;
iIndex=SendMessage(hList,LVM_GETNEXTITEM,-1,LVNI_FOCUSED);
if(iIndex==-1)
break;
LvItem.iSubItem=0;
if(bEscKey==0)
{
LvItem.pszText=szText;
GetWindowText(hEdit, szText, sizeof(szText));
SendMessage(hList,LVM_SETITEMTEXT,(WPARAM)iIndex,(LPARAM)&LvItem);
}
else{
LvItem.pszText=szTempStr;
SendMessage(hList,LVM_SETITEMTEXT,(WPARAM)iIndex,(LPARAM)&LvItem);
bEscKey=0;
}
}
break;
}
}
case WM_PAINT:
{
return 0;
}
break;
case WM_INITDIALOG:
{
InitCommonControls();
hList=GetDlgItem(hWnd,IDC_LIST);
SendMessage(hList,LVM_SETTEXTBKCOLOR, 0,(LPARAM)CLR_NONE);
SendMessage(hList,LVM_SETEXTENDEDLISTVIEWSTYLE,0,LVS_EX_FULLROWSELECT); // Set style
SendMessageA(hWnd,WM_SETICON,(WPARAM) 1,(LPARAM) LoadIconA(hInst,MAKEINTRESOURCE(IDI_ICON1)));
memset(&LvCol,0,sizeof(LvCol));
LvCol.mask=LVCF_TEXT|LVCF_WIDTH|LVCF_SUBITEM;
LvCol.cx=0x28;
LvCol.pszText="Name";
LvCol.cx=0x42;
SendMessage(hList,LVM_INSERTCOLUMN,0,(LPARAM)&LvCol);
LvCol.pszText="Key/Serial";
SendMessage(hList,LVM_INSERTCOLUMN,1,(LPARAM)&LvCol);
LvCol.pszText="Description";
SendMessage(hList,LVM_INSERTCOLUMN,2,(LPARAM)&LvCol);
memset(&LvItem,0,sizeof(LvItem));
if (SHGetFileInfo((LPCSTR)"medicine.txt", 0,&shFileInfo, sizeof(SHFILEINFO),SHGFI_TYPENAME) != 0)
{
f = fopen("medicine.txt", "r");
iGIndex = 0;
while(fread(&r, sizeof(r), 1, f) == 1)
{
LvItem.mask=LVIF_TEXT;
LvItem.cchTextMax = 256;
LvItem.iItem=iGIndex;
LvItem.iSubItem=0;
LvItem.pszText=r.name;
SendMessage(hList,LVM_INSERTITEM,0,(LPARAM)&LvItem);
LvItem.iSubItem=1;
LvItem.pszText=r.serial;
SendMessage(hList,LVM_SETITEM,0,(LPARAM)&LvItem);
LvItem.iSubItem=2;
LvItem.pszText=r.description;
SendMessage(hList,LVM_SETITEM,0,(LPARAM)&LvItem);
++iGIndex;
}
fclose(f);
}
ShowWindow(hWnd,SW_NORMAL);
UpdateWindow(hWnd);
while(TRUE)
{
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
if(msg.message==WM_QUIT)
{
break;
}
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}
break;
case WM_COMMAND:
{
switch(LOWORD(wParam))
{
case IDC_SAVE:
iListViewCount = ListView_GetItemCount(hList);
f=fopen("medicine.txt","w");
if (!f)
break;
for (iGIndex =0;iGIndex <iListViewCount ; iGIndex++)
{
ListView_GetItemText(hList, iGIndex, 0, r.name, NAMELENGTH-1);
ListView_GetItemText(hList, iGIndex, 1, r.serial,SERIALLENGTH-1);
ListView_GetItemText(hList, iGIndex, 2, r.description,DESCRIPTIONLENGTH-1);
fwrite(&r,sizeof(struct rec),1,f);
}
break;
case IDC_ADDITEM:
{
INT iItem;
CHAR NameText[NAMELENGTH] = {0};
CHAR SerialText[SERIALLENGTH] = {0};
CHAR DescriptionText[DESCRIPTIONLENGTH] = {0};
iItem=SendMessage(hList,LVM_GETITEMCOUNT,0,0);
GetDlgItemText(hWnd,IDC_ADD_NAME,NameText,NAMELENGTH-1);
if((lstrlen(NameText))==0)
{
MessageBox(hWnd,"Please Enter Some Text for Name","Error",MB_OK|MB_ICONINFORMATION);
break;
}
GetDlgItemText(hWnd,IDC_ADD_SERIAL,SerialText,SERIALLENGTH-1);
if((lstrlen(SerialText))==0)
{
MessageBox(hWnd,"Please Enter Some Text for Serial","Error",MB_OK|MB_ICONINFORMATION);
break;
}
GetDlgItemText(hWnd,IDC_ADD_DESCRIPTION,DescriptionText,DESCRIPTIONLENGTH-1);
if((lstrlen(DescriptionText))==0)
{
MessageBox(hWnd,"Please Enter Some Text for Description","Error",MB_OK|MB_ICONINFORMATION);
break;
}
LvItem.mask= LVIF_TEXT;
LvItem.iItem=iItem;
LvItem.iSubItem=0;
LvItem.pszText=NameText;
SendMessage(hList,LVM_INSERTITEM,0,(LPARAM)&LvItem);
LvItem.pszText=SerialText;
LvItem.iSubItem=1;
SendMessage(hList,LVM_SETITEM,0,(LPARAM)&LvItem);
LvItem.pszText=DescriptionText;
LvItem.iSubItem=2;
SendMessage(hList,LVM_SETITEM,0,(LPARAM)&LvItem);
}
break;
case IDC_DELSELITEM:
if(iFlag)
SendMessage(hList,LVM_DELETEITEM,iSelect,0);
iFlag=0;
break;
}
}
break;
default:
{
return FALSE;
}
}
return TRUE;
}
INT WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, INT iCmdShow)
{
INITCOMMONCONTROLSEX InitCtrls;
InitCtrls.dwICC = ICC_LISTVIEW_CLASSES;
InitCtrls.dwSize = sizeof(INITCOMMONCONTROLSEX);
BOOL bRet = InitCommonControlsEx(&InitCtrls);
hInst=hInstance;
DialogBoxParam(hInstance, MAKEINTRESOURCE(IDC_DIALOG), NULL, (DLGPROC)DialogProc,0);
return 0;
}