Я нажимаю кнопку «Назад», программа может получить обычный путь, но когда я снова нажимаю кнопку «Назад», возникает ошибка. Я не знаю, проблема с памятью. Код для создания окна опускаю, при необходимости могу оформить. Может я новичок, код не очень лаконичный, подскажите, есть ли предложения по улучшению.
HWND BackButton;
std::string strFilePath = "C:\\Program Files (x86)\\360\\360DrvMgr\\config\\defaultskin\\*.*"; /* Initial path */
LPCSTR FilePath = strFilePath.c_str(); /* exchange to LPCSTR */
{
switch (message)
{
case WM_CREATE:
{
BackButton = CreateWindow(WC_BUTTON, "BACK", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, 850, 235, 30, 30, hwnd, HMENU(BACK), AppInstance, NULL); /*Create the BACK Button*/
}
break;
case WM_COMMAND:
{
switch (LOWORD(wParam)) /* mouse event*/
{
case BACK: /* clik the BACK button*/
{
const char *pc = FilePath; /*Initial path*/
char drive[_MAX_DRIVE]; /*_splitpath_s param*/
char dir[_MAX_DIR]; /*_splitpath_s param*/
char fname[_MAX_FNAME]; /*_splitpath_s param*/
char ext[_MAX_EXT];
char split[] = "\\"; /*_splitpath_s param*/
char *p = NULL; /*filter*/;
int countSlantBar = 0;
std::string ReMakePath; /* string fathe dir name*/
std::string MakePath; /* final full path */
_splitpath_s(pc, drive, dir, fname, ext);
int Sdir = strlen(dir);
for (Sdir - 3; Sdir >= 0; Sdir--) /* when click the BACK button get the father dir name*/
{
if (pc[Sdir] == *split)
{
ReMakePath = ReMakePath + pc[Sdir];
}
if (countSlantBar == 1) {
break;
}
else
{
ReMakePath = pc[Sdir] + ReMakePath; /* save the fathe dir as string */
}
}
std::string s = pc;
int pos = s.find(ReMakePath);
int n = ReMakePath.size();
s = s.erase(pos, n); /* cut the father dir name\\ and save *.* */
LPCSTR Mpath = s.c_str();
SendMessage(ComBox, CB_ADDSTRING, 0, LPARAM(Mpath));
FilePath = Mpath; /* The location of the error */
break;
}
return TRUE;
}
break;
введите описание изображения здесь