///<summary>Picks a file and sets the specified textbox's text to the file path.</summary> ///<param name="hwndOpener">The HWND of the window that opened/owns the dialog box.</param> ///<param name="hwndText">The HWND of the textbox control that will display the name.</param> VOID ChooseFile(HWND hwndOpener, HWND hwndText) { DWORD dwError = 0; TCHAR szFileName[FILENAME_SIZE] = { 0 }; if (!OpenFileDlg(hwndOpener, szFilter, szFileName, FILENAME_SIZE) && (dwError == CommDlgExtendedError()) != 0) { _ftprintf(stderr, TEXT("Error: %s\n"), CommDlgExtendedErrorToString(dwError)); } else { SetWindowText(hwndText, szFileName); } }
void CModulePropertiesDlg::OnBnClickedSongImport() { CModuleImportDlg importDlg(m_pDocument); CFileDialog OpenFileDlg(TRUE, _T("ftm"), 0, OFN_HIDEREADONLY, _T("FamiTracker files (*.ftm)|*.ftm|All files (*.*)|*.*||"), theApp.GetMainWnd(), 0); if (OpenFileDlg.DoModal() == IDCANCEL) return; if (importDlg.LoadFile(OpenFileDlg.GetPathName(), m_pDocument) == false) return; importDlg.DoModal(); FillSongList(); }
BOOL TShareDlg::FileAddDlg(TDlg *dlg, ShareMng *shareMng, ShareInfo *shareInfo, Cfg *cfg) { char buf[MAX_BUF_EX] = "", path[MAX_BUF_EX]; if (!OpenFileDlg(dlg, OpenFileDlg::MULTI_OPEN).Exec(buf, GetLoadStrU8(IDS_ADDFILE), GetLoadStrAsFilterU8(IDS_OPENFILEALLFLTR), cfg->lastOpenDir)) return FALSE; cfg->WriteRegistry(CFG_GENERAL); int dirlen = strlen(cfg->lastOpenDir); if (buf[dirlen]) return shareMng->AddFileShare(shareInfo, buf); for (char *fname=buf+dirlen+1; *fname; fname += strlen(fname) +1) { if (MakePath(path, buf, fname) >= MAX_PATH_U8) continue; shareMng->AddFileShare(shareInfo, path); } return TRUE; }
int main(int argc, char ** argv) { print_lib_intro_notice(cout); print_copyright_notice(cout); cout << endl; // example #2: open a file, run a geometry optimization, and save a file. // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ char infile_name[1048]; char outfile_name[1048]; DWORD nFilterIndex; if (OpenFileDlg(0, "Ghemical Project File (*.gpr)\0*.gpr\0All files \0*.*\0", infile_name, nFilterIndex) != S_OK) { return -1; } // check that we have got both file names from the command line. /*if (argc != 3) { cout << "usage : example2 infile.gpr outfile.gpr" << endl; exit(1); } char * infile_name = argv[1]; char * outfile_name = argv[2]; */ // create a model object, and read in a file. model * mdl = new model(); cout << "trying to open a file " << infile_name << " ; "; ifstream ifile; ifile.open(infile_name, ios::in); if (ifile.fail()) { cout << "failed!!!" << endl; ifile.close(); delete mdl; return -1; } cout << "ok!!!" << endl; ReadGPR(* mdl, ifile, false, false); ifile.close(); printf( "mdl->use_periodic_boundary_conditions = %d\n", mdl->use_periodic_boundary_conditions); printf( "mdl->periodic_box_HALFdim[0] = %f\n", mdl->periodic_box_HALFdim[0]); printf( "mdl->periodic_box_HALFdim[1] = %f\n", mdl->periodic_box_HALFdim[1]); printf( "mdl->periodic_box_HALFdim[2] = %f\n", mdl->periodic_box_HALFdim[2]); // if everything went fine, then create a computation engine object, initialize it, // and create a geometry optimizer object using the computation engine object. engine * eng = mdl->GetCurrentSetup()->CreateEngineByIDNumber(CURRENT_ENG1_MM); // engine * eng = mdl->GetCurrentSetup()->CreateEngineByIDNumber(ENG1_MM_TRIPOS52); // engine * eng = mdl->GetCurrentSetup()->CreateEngineByIDNumber(ENG1_MM_DEFAULT); // eng_pbc != NULL if we will use a system with periodic boundary conditions... // engine_pbc * eng_pbc = dynamic_cast<engine_pbc *>(eng); #if USE_ENGINE_PBC_TST engine_pbc_tst * eng_pbc = dynamic_cast<engine_pbc_tst *>(eng); #else engine_pbc * eng_pbc = dynamic_cast<engine_pbc *>(eng); #endif /*USE_ENGINE_PBC_TST*/ CopyCRD(mdl, eng, 0); CopyLockedCRD(mdl, eng, 0); printf("\n%f %f %f %f %f %f\n", mdl->maxCRD[0], mdl->minCRD[0], mdl->maxCRD[1], mdl->minCRD[1], mdl->maxCRD[2], mdl->minCRD[2]); mdl->periodic_box_HALFdim[0] = (mdl->maxCRD[0] - mdl->minCRD[0]+0.14) / 2.; mdl->periodic_box_HALFdim[1] = (mdl->maxCRD[1] - mdl->minCRD[1]+0.12) / 2.; mdl->periodic_box_HALFdim[0] = (mdl->maxCRD[0] - mdl->minCRD[0]) / 2. + 0.14; mdl->periodic_box_HALFdim[1] = (mdl->maxCRD[1] - mdl->minCRD[1]) / 2. + 0.12; printf( "mdl->use_periodic_boundary_conditions = %d\n", mdl->use_periodic_boundary_conditions); printf( "mdl->periodic_box_HALFdim[0] = %f\n", mdl->periodic_box_HALFdim[0]); printf( "mdl->periodic_box_HALFdim[1] = %f\n", mdl->periodic_box_HALFdim[1]); printf( "mdl->periodic_box_HALFdim[2] = %f\n", mdl->periodic_box_HALFdim[2]); geomopt * opt = new geomopt(eng, 100, 0.025, 10.0); // then take 100 geometry optimization steps, and print out some data about progess. for (int n1 = 0;n1 < 100;n1++) { opt->TakeCGStep(conjugate_gradient::Newton2An); eng_pbc->CheckLocations(); cout << "step = " << (n1 + 1) << " "; cout << "energy = " << opt->optval << " "; cout << "step length = " << opt->optstp << endl; } // now copy the optimized coordinates back to the model object, and save the file. CopyCRD(eng, mdl, 0); delete opt; opt = NULL; delete eng; eng = NULL; //------------------------------------------------------------------ TCHAR filter[] = TEXT("Ghemical Project File (*.gpr)\0*.gpr\0") TEXT("All Files (*.*)\0*.*\0"); sprintf(outfile_name, "\0"); if (SaveFileDlg(0, outfile_name, filter, nFilterIndex) == S_OK) { cout << "now saving file " << outfile_name << endl; ofstream ofile; ofile.open(outfile_name, ios::out); WriteGPR_v100(* mdl, ofile); ofile.close(); } // finally release all allocated memory and leave. delete mdl; mdl = NULL; return 0; }
int TSaveCommonDlg::Exec(void) { modalFlg = TRUE; char fname[MAX_BUF], last_dir[MAX_BUF], buf[MAX_BUF], *ext; // 最終保存ディレクトリが無くなっている場合、少しさかのぼる for (int i=0; i < 5; i++) { if (*cfg->lastSaveDir && GetFileAttributesU8(cfg->lastSaveDir) == 0xffffffff) if (!PathToDir(cfg->lastSaveDir, cfg->lastSaveDir)) break; } strcpy(last_dir, *cfg->lastSaveDir ? cfg->lastSaveDir : "."); while (1) { FileInfo *fileInfo = shareInfo->fileInfo[offset]; MakePath(fname, last_dir, fileInfo->Fname()); // ファイルダイアログ TApp::GetApp()->AddWin(this); BOOL ret = OpenFileDlg(parentWin, OpenFileDlg::NODEREF_SAVE, (LPOFNHOOKPROC)TApp::WinProc).Exec(fname, GetLoadStrU8(IDS_SAVEFILE), GetLoadStrAsFilterU8(IDS_OPENFILEALLFLTR), last_dir); TApp::GetApp()->DelWin(this); hWnd = NULL; if (!ret) return FALSE; // shortcut の場合は、リンク先に飛ぶ if (!isLinkFile && (ext = strrchr(fname, '.')) && stricmp(ext, ".lnk") == 0) { char arg[MAX_BUF]; if (ReadLinkU8(fname, last_dir, arg)) { if ((GetFileAttributesU8(last_dir) & FILE_ATTRIBUTE_DIRECTORY) == 0) GetParentDir(last_dir, last_dir); } continue; } fileInfo = shareInfo->fileInfo[offset]; PathToDir(fname, last_dir); ForcePathToFname(fname, fname); fileInfo->SetSelected(TRUE); // 上書き確認 for (int i=0; i < shareInfo->fileCnt; i++) { if (!shareInfo->fileInfo[i]->IsSelected()) continue; MakePath(buf, last_dir, offset == i ? fname : shareInfo->fileInfo[i]->Fname()); if (GetFileAttributesU8(buf) != 0xffffffff) { ret = parentWin->MessageBoxU8(GetLoadStrU8(IDS_OVERWRITE), GetLoadStrU8(IDS_ATTENTION), MB_OKCANCEL|MB_ICONEXCLAMATION); if (ret != IDOK) { for (int j=0; j < shareInfo->fileCnt; j++) shareInfo->fileInfo[j]->SetSelected(FALSE); } break; } } if (ret) { fileInfo->SetFname(fname); strcpy(cfg->lastSaveDir, last_dir); cfg->WriteRegistry(CFG_GENERAL); return TRUE; } } // not reach }
BOOL CALLBACK StatusDlgProc (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { HANDLE hThread ; //DWORD ProtFileThreadID; UINT ProtFileThreadID; switch (message) { case WM_INITDIALOG: //创建消息框缓冲 pMessageBuffer = new TCHAR [0x10000]; ZeroMemory(pMessageBuffer, 0x10000); //将消息缓冲区数据清零 hProgress = GetDlgItem(hDlg, IDC_PROGRESS) ; DragAcceptFiles(hDlg,TRUE); break; case WM_DROPFILES://支持文件拖放 if(FALSE==ISWORKING){ ZeroMemory(pMessageBuffer, 0x10000); //将消息缓冲区数据清零 ZeroMemory(szFilePath,MAX_PATH);//清空文件名缓冲 DragQueryFile((HDROP)wParam, 0, szFilePath, sizeof(szFilePath)); DragFinish((HDROP)wParam); SendDlgItemMessage(hDlg,IDC_MESSAGEBOX_EDIT,WM_SETTEXT,0,0);//清空消息框中的提示 SendDlgItemMessage(hDlg,IDC_FILEPATH_EDIT,WM_SETTEXT,MAX_PATH,(LPARAM)szFilePath); AddLine(hDlg,szFilePath); if(!IsPEFile(szFilePath,hDlg)) EnableWindow(GetDlgItem(hDlg,IDC_PROT_BUTTON), FALSE); else EnableWindow(GetDlgItem(hDlg,IDC_PROT_BUTTON), TRUE); SendMessage(hProgress,PBM_SETPOS, 0, 0); } break; case WM_COMMAND: switch (LOWORD (wParam)) { case IDC__EXIT_BUTTON: SendMessage(GetParent(GetParent(hDlg)), WM_CLOSE, 0, 0); break; //置顶 case IDC_ONTOP: if(SendDlgItemMessage(hDlg, IDC_ONTOP, BM_GETCHECK, 0, 0)==BST_CHECKED) SetWindowPos(GetParent(GetParent(hDlg)),HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); else SetWindowPos(GetParent(GetParent(hDlg)),HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); break; //保护 case IDC_PROT_BUTTON: EnableWindow(GetDlgItem(hDlg,IDC_PROT_BUTTON), FALSE); EnableWindow(GetDlgItem(hDlg,IDC_OPEN_BUTTON), FALSE);//压缩过程中打开按钮不可用 //ProtTheFile(hDlg); //创建一个进程来压缩数据 // hThread = CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)ProtTheFile, (VOID *)hDlg, NORMAL_PRIORITY_CLASS, &ProtFileThreadID); hThread = (HANDLE)_beginthreadex( NULL, 0, (unsigned int (_stdcall*)(void*))&ProtTheFile, (LPVOID)hDlg, 0, &ProtFileThreadID ); CloseHandle(hThread); break; //打开预处理 case IDC_OPEN_BUTTON: if(!OpenFileDlg(szFilePath,hDlg)) break; SendDlgItemMessage(hDlg,IDC_FILEPATH_EDIT,WM_SETTEXT,MAX_PATH,(LPARAM)szFilePath); AddLine(hDlg,szFilePath); if(!IsPEFile(szFilePath,hDlg)) EnableWindow(GetDlgItem(hDlg,IDC_PROT_BUTTON), FALSE); else EnableWindow(GetDlgItem(hDlg,IDC_PROT_BUTTON), TRUE); SendMessage(hProgress,PBM_SETPOS, 0, 0); break; } return TRUE; break; } return FALSE; }
void Load_traj(int ind1, int ind2, int dim, vector<double> & X) { //print_lib_intro_notice(cout); //print_copyright_notice(cout); cout << endl; // example #2: open a file, run a geometry optimization, and save a file. // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ char infile_name[1048]; DWORD nFilterIndex; if (OpenFileDlg(0, "Ghemical Project File (*.gpr)\0*.gpr\0All files \0*.*\0", infile_name, nFilterIndex) != S_OK) { return; } cout << "trying to open a file " << infile_name << " ; "; ifstream ifile; ifile.open(infile_name, ios::in); if (ifile.fail()) { cout << "failed!!!" << endl; ifile.close(); return; } cout << "ok!!!" << endl; #if _USE_WINGHEMICAL_ //готовим классы для 3D визуализации hInst = GetModuleHandle(NULL); singleton_cleaner<win_app> app_cleaner; win_app * app = win_app::GetInstance(); // new win_app() here // -> SetNewProject(); // -> new win_project(* win_class_factory::GetInstance()); // -> new win_class_factory() : graphics_class_factory() // // win_project() // -> CreateProjectView() -> new win_project_view(prj2) -> LightAdded(); ObjectAdded(); // win_project() // -> AddGraphicsView(NULL, false); // project::AddGraphicsView() // -> win_class_factory::ProduceGraphicsView() // -> new win_graphics_view(prj2, cam); // -> BeginWinGhemical(); view_widget = CreateWinGhemical(this); SendMessage(view_widget, WM_COMMAND, ID_FILE_INITOG2, 0); ConfigureHandler(view_widget); app_cleaner.SetInstance(app); app->GetWinProject()->SetApp(app); //app->work(argc, argv); // ReadGPR(* app->GetWinProject(), ifile, false, false); ifile.close(); { HANDLE hThread = NULL; { setup * su = app->GetWinProject()->GetCurrentSetup(); static jobinfo_MolDyn_tst ji; ji.prj = app->GetWinProject(); ji.md = moldyn_tst_param(su); app->GetWinProject()->start_job_MolDyn_tst(& ji); } } StartWinGhemical(NULL); #else model * mdl = new model(); ReadGPR(* mdl, ifile, false, false); ifile.close(); #endif char fn[512]; if (OpenFileDlg(NULL, "Ghemical Trajectory File (*.traj)\0*.traj\0All files \0*.*\0", fn, nFilterIndex) == S_OK) { cout << "trying to open \"" << fn << "\"." << endl; ifstream * trajfile; //mdl->OpenTrajectory(filename); //{ i32s traj_num_atoms = mdl->GetAtomCount(); /* for (iter_al it1 = GetAtomsBegin();it1 != GetAtomsEnd();it1++) { if (!((* it1).flags & ATOMFLAG_IS_HIDDEN)) traj_num_atoms++; } */ trajfile = new ifstream(fn, ios::in | ios::binary); //trajfile->seekg(8, ios::beg); // skip the file id... char file_id[10]; trajfile->read((char *) file_id, 8); bool extended_trajectory = false; if (0 == ::strncmp(file_id, "traj_v11", 8)) extended_trajectory = true; int natoms; trajfile->read((char *) & natoms, sizeof(natoms)); if (natoms != traj_num_atoms) { printf("natoms %d != traj_num_atoms %d\n", natoms, traj_num_atoms); // ErrorMessage("The trajectory is incompatible with the current structure/setup!!!"); // PrintToLog("incompatible file : different number of atoms!\n"); goto e_close_traj; } i32s total_traj_frames; trajfile->read((char *) & total_traj_frames, sizeof(total_traj_frames)); float tstep = 0.0; if (extended_trajectory) trajfile->read((char *) & tstep, sizeof(tstep)); //char mbuff1[256]; strstream str1(mbuff1, sizeof(mbuff1)); //str1 << "the trajectory file contains " << total_traj_frames << " frames." << endl << ends; //PrintToLog(mbuff1); //current_traj_frame = 0; //} atom * mt_a1; // measure_tool atom * mt_a2; // measure_tool atom * mt_a3; // measure_tool float ekin; float epot; X.resize(total_traj_frames); //i32s max_frames = app->GetWinProject()->GetTotalFrames(); for (i32s loop = 0;loop < total_traj_frames; loop++) { //app->GetWinProject()->SetCurrentFrame(loop); //this->ReadFrame(); //void project::ReadFrame(void) //{ i32s place = GetTrajectoryHeaderSize(extended_trajectory); // skip the header... place += GetTrajectoryFrameSize(extended_trajectory, natoms) * loop; // get the correct frame... //place += GetTrajectoryEnergySize(); // skip epot and ekin... trajfile->seekg(place, ios::beg); trajfile->read((char *) & ekin, sizeof(ekin)); trajfile->read((char *) & epot, sizeof(epot)); i32s ind = 0; mt_a1 = mt_a2 = mt_a3 = NULL; for (iter_al it1 = mdl->GetAtomsBegin(); it1 != mdl->GetAtomsEnd(); it1++) { // if ((* it1).flags & ATOMFLAG_IS_HIDDEN) continue; // currently all coordinates are written... float t1a; fGL cdata[3]; for (i32s t4 = 0;t4 < 3;t4++) { trajfile->read((char *) & t1a, sizeof(t1a)); cdata[t4] = t1a; } if (extended_trajectory) { for (i32s t4 = 0;t4 < 3;t4++){ trajfile->read((char *) & t1a, sizeof(t1a)); //vdata[t4] = t1a; } for (i32s t4 = 0;t4 < 3;t4++){ trajfile->read((char *) & t1a, sizeof(t1a)); //adata[t4] = t1a; } for (i32s t4 = 0;t4 < 3;t4++){ trajfile->read((char *) & t1a, sizeof(t1a)); //fdata[t4] = t1a; } } (* it1).SetCRD(0, cdata[0], cdata[1], cdata[2]); if (ind == ind1) { mt_a1 = &(* it1); } if (ind == ind2) { mt_a2 = &(* it1); } /*if (ind == indc) { mt_a3 = &(* it1); }*/ ind++; } //this->UpdateAllGraphicsViews(); //} fGL coordinate; if (mt_a1 && mt_a2 && dim >=0 && dim < 3) { const fGL * p1 = mt_a1->GetCRD(0); const fGL * p2 = mt_a2->GetCRD(0); // my measure //cout << "el = " << mt_a1->el.GetSymbol() << " " << mt_a1->el.GetAtomicNumber() << " x = " << p1[0] << " y = " << p1[1] << " z = " << p1[2] << endl; coordinate = p1[dim]-p2[dim]; } else coordinate = 0; X[loop] = coordinate; //ref->this->UpdateAllGraphicsViews(true); //::Sleep(100); //void * udata = convert_cset_to_plotting_udata(this, 0); //f64 value = coordinate; //plot->AddData(loop, value, udata); //mt_a1 = mt_a2 = mt_a3 = NULL; } e_close_traj: //app->GetWinProject()->CloseTrajectory(); if (trajfile != NULL) { trajfile->close(); delete trajfile; trajfile = NULL; } } }
int Look_txt() { TCHAR filter[] = TEXT("Ghemical MD results File (*.txt)\0*.txt\0") TEXT("All Files (*.*)\0*.*\0"); TCHAR fpath[1024]; TCHAR filename[1024]; sprintf(filename, "\0"); { DWORD nFilterIndex; vector<string> names; vector<string> *pnames = &names; vector<vector<double> > vectors; vectors.reserve(2000000); while (OpenFileDlg(0, filter, fpath, nFilterIndex) == S_OK) { ReadDatFile(NULL, fpath, filename, &vectors, pnames); pnames = NULL; printf("\nfilename %s\n\n", filename); int cols = names.size(); int rows = vectors.size(); #if WRITE_LOCKED_FORCES int cMom = 4 - 1; int cVx = 5 - 1; int cFxup = 14 - 1; int cFxdw = 17 - 1; int cVxup = 8 - 1; int cVxdw = 11 - 1; #endif #if WRITE_WORKED_FORCES int cMom = 4 - 1; int cVx = 5 - 1; int cVxup = 14 - 1; int cVxdw = 17 - 1; int cVx_wk_up = 8 - 1; int cVx_wk_dw = 11 - 1; int cFx_wk_up = 20 - 1; int cFx_wk_dw = 23 - 1; #endif vector<double> means(cols, 0.0); printf("vectors.size() = %d\n",rows); printf("names.size() = %d\n", cols); for (vector<vector<double> >::iterator it = vectors.begin(); it != vectors.end(); it++) { for (int c = 0; c < cols; c++) { means[c] += (*it).operator [](c); } } for (int c = 0; c < cols; c++) { means[c] /= rows; printf("mean(%s) = %f\n", names[c].c_str(), means[c]); } #if WRITE_LOCKED_FORCES || WRITE_WORKED_FORCES int r0 = 0; cout << "enter r0\n"; cin >> r0; #endif #if WRITE_LOCKED_FORCES vector<double> dF(rows-r0); for (int r = r0; r < rows; r++) { dF[r-r0] = vectors[r][cFxup] - vectors[r][cFxdw]; } Statistika (dF, "dF"); vector<double> Mom(rows-r0); for (r = r0; r < rows; r++) { Mom[r-r0] = vectors[r][cMom]; } Statistika (Mom, "Mom"); vector<double> dV(rows-r0); for (r = r0; r < rows; r++) { dV[r-r0] = vectors[r][cVxup] - vectors[r][cVxdw]; } Statistika (dV, "dV"); vector<double> Vx(rows-r0); for (r = r0; r < rows; r++) { Vx[r-r0] = vectors[r][cVx]; } Statistika (Vx, "Vx"); #endif #if WRITE_WORKED_FORCES vector<double> dF_wk(rows-r0); for (int r = r0; r < rows; r++) { dF_wk[r-r0] = vectors[r][cFx_wk_up] - vectors[r][cFx_wk_dw]; } Statistika (dF_wk, "dF_wk"); vector<double> dV_wk(rows-r0); for (r = r0; r < rows; r++) { dV_wk[r-r0] = vectors[r][cVx_wk_up] - vectors[r][cVx_wk_dw]; } Statistika (dV_wk, "dV_wk"); //if (!worked[n1]) vector<double> Mom(rows-r0); for (r = r0; r < rows; r++) { Mom[r-r0] = vectors[r][cMom]; } Statistika (Mom, "Mom"); vector<double> dV(rows-r0); for (r = r0; r < rows; r++) { dV[r-r0] = vectors[r][cVxup] - vectors[r][cVxdw]; } Statistika (dV, "dV"); vector<double> Vx(rows-r0); for (r = r0; r < rows; r++) { Vx[r-r0] = vectors[r][cVx]; } Statistika (Vx, "Vx"); #endif } } /*else { DWORD nFilterIndex; if (SaveFileDlg(0, filename, filter, nFilterIndex) == S_OK) { SetDlgItemText(ref->hDlg,IDC_EDIT_TRAJFILE2, filename); } }*/ printf("Hello World!\n"); return 0; }
BOOL TSetupSheet::EvCommand(WORD wNotifyCode, WORD wID, LPARAM hWndCtl) { char buf[MAX_PATH_U8] = "", buf2[MAX_PATH_U8] = "", protocol[MAX_LISTBUF] = ""; int i; UrlObj *obj; if (resId == SETUP_SHEET1) { switch (wID) { case ADD_BUTTON: if (GetDlgItemText(BROADCAST_EDIT, buf, sizeof(buf)) <= 0) return TRUE; if (ResolveAddr(buf) == 0) return MessageBox(GetLoadStr(IDS_CANTRESOLVE)), TRUE; for (i=0; SendDlgItemMessage(BROADCAST_LIST, LB_GETTEXT, i, (LPARAM)buf2) != LB_ERR; i++) { if (stricmp(buf, buf2) == 0) return TRUE; } SendDlgItemMessage(BROADCAST_LIST, LB_ADDSTRING, 0, (LPARAM)buf); SetDlgItemText(BROADCAST_EDIT, ""); return TRUE; case DEL_BUTTON: while ((int)SendDlgItemMessage(BROADCAST_LIST, LB_GETSELCOUNT, 0, 0) > 0) { if (SendDlgItemMessage(BROADCAST_LIST, LB_GETSELITEMS, 1, (LPARAM)&i) != 1) break; SendDlgItemMessage(BROADCAST_LIST, LB_GETTEXT, (WPARAM)i, (LPARAM)buf); SetDlgItemText(BROADCAST_EDIT, buf); if (SendDlgItemMessage(BROADCAST_LIST, LB_DELETESTRING, (WPARAM)i, (LPARAM)buf) == LB_ERR) break; } return TRUE; } } else if (resId == SETUP_SHEET2) { switch (wID) { case MAINICON_BUTTON: case REVICON_BUTTON: OpenFileDlg(this).Exec(wID == MAINICON_BUTTON ? MAINICON_EDIT : REVICON_EDIT, GetLoadStrU8(IDS_OPENFILEICON), GetLoadStrAsFilterU8(IDS_OPENFILEICONFLTR)); return TRUE; } } else if (resId == SETUP_SHEET3) { switch (wID) { case SENDDETAIL_BUTTON: { TSortDlg(cfg, this).Exec(); return TRUE; } case SOUNDFILE_BUTTON: GetWindowsDirectoryU8(buf, sizeof(buf)); strcat(buf, "\\Media"); GetCurrentDirectoryU8(sizeof(buf2), buf2); OpenFileDlg(this).Exec(SOUND_EDIT, GetLoadStrU8(IDS_OPENFILESND), GetLoadStrAsFilterU8(IDS_OPENFILESNDFLTR), buf); SetCurrentDirectoryU8(buf2); return TRUE; case SOUNDPLAY_BUTTON: if (GetDlgItemTextU8(SOUND_EDIT, buf, sizeof(buf)) > 0) { PlaySoundU8(buf, 0, SND_FILENAME|SND_ASYNC); } return TRUE; } } else if (resId == SETUP_SHEET4) { switch (wID) { case LOGFILE_BUTTON: OpenFileDlg(this, OpenFileDlg::SAVE).Exec(LOG_EDIT, GetLoadStrU8(IDS_OPENFILELOG), GetLoadStrAsFilterU8(IDS_OPENFILELOGFLTR)); return TRUE; } } else if (resId == SETUP_SHEET6) { switch (wID) { case ADD_BUTTON: if ((i = (int)SendDlgItemMessage(URL_LIST, LB_GETCURSEL, 0, 0)) != LB_ERR && SendDlgItemMessage(URL_LIST, LB_GETTEXT, (WPARAM)i, (LPARAM)protocol) != LB_ERR && (obj = SearchUrlObj(&tmpUrlList, protocol))) { wsprintf(buf, GetLoadStrU8(IDS_EXECPROGRAM), protocol); OpenFileDlg(this).Exec(URL_EDIT, buf, GetLoadStrAsFilterU8(IDS_OPENFILEPRGFLTR)); } return TRUE; case URL_LIST: if ((i = (int)SendDlgItemMessage(URL_LIST, LB_GETCURSEL, 0, 0)) != LB_ERR && SendDlgItemMessage(URL_LIST, LB_GETTEXT, (WPARAM)i, (LPARAM)protocol) != LB_ERR && (obj = SearchUrlObj(&tmpUrlList, protocol))) { SetDlgItemTextU8(URL_EDIT, obj->program); } return TRUE; } } return FALSE; }
INT_PTR CALLBACK DlgProcIcoLibOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { struct IcoLibOptsData *dat; static HTREEITEM prevItem = 0; static HWND hPreview = NULL; dat = (struct IcoLibOptsData*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); switch (msg) { case WM_INITDIALOG: TranslateDialogDefault(hwndDlg); hPreview = GetDlgItem(hwndDlg, IDC_PREVIEW); dat = (struct IcoLibOptsData*)mir_alloc(sizeof(struct IcoLibOptsData)); dat->hwndIndex = NULL; SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG_PTR)dat); // // Reset temporary data & upload sections list // { mir_cslock lck(csIconList); for (int indx = 0; indx < iconList.getCount(); indx++) { iconList[indx]->temp_file = NULL; iconList[indx]->temp_icon = NULL; iconList[indx]->temp_reset = FALSE; } bNeedRebuild = FALSE; } // // Setup preview listview // ListView_SetUnicodeFormat(hPreview, TRUE); ListView_SetExtendedListViewStyleEx(hPreview, LVS_EX_INFOTIP, LVS_EX_INFOTIP); ListView_SetImageList(hPreview, ImageList_Create(GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), ILC_COLOR32|ILC_MASK, 0, 30), LVSIL_NORMAL); ListView_SetIconSpacing(hPreview, 56, 67); SendMessage(hwndDlg, DM_REBUILD_CTREE, 0, 0); return TRUE; case DM_REBUILD_CTREE: { HWND hwndTree = GetDlgItem(hwndDlg, IDC_CATEGORYLIST); int indx; TCHAR itemName[1024]; HTREEITEM hSection; if (!hwndTree) break; TreeView_SelectItem(hwndTree, NULL); TreeView_DeleteAllItems(hwndTree); for (indx = 0; indx < sectionList.getCount(); indx++) { TCHAR* sectionName; int sectionLevel = 0; hSection = NULL; mir_tstrcpy(itemName, sectionList[indx]->name); sectionName = itemName; while (sectionName) { // allow multi-level tree TCHAR* pItemName = sectionName; HTREEITEM hItem; if (sectionName = _tcschr(sectionName, '/')) { // one level deeper *sectionName = 0; } pItemName = TranslateTS(pItemName); hItem = FindNamedTreeItemAt(hwndTree, hSection, pItemName); if (!sectionName || !hItem) { if (!hItem) { TVINSERTSTRUCT tvis = {0}; TreeItem *treeItem = (TreeItem *)mir_alloc(sizeof(TreeItem)); treeItem->value = SECTIONPARAM_MAKE(indx, sectionLevel, sectionName ? 0 : SECTIONPARAM_HAVEPAGE); treeItem->paramName = mir_t2a(itemName); tvis.hParent = hSection; tvis.hInsertAfter = TVI_SORT; tvis.item.mask = TVIF_TEXT|TVIF_PARAM|TVIF_STATE; tvis.item.pszText = pItemName; tvis.item.lParam = (LPARAM) treeItem; tvis.item.state = tvis.item.stateMask = db_get_b(NULL, "SkinIconsUI", treeItem->paramName, TVIS_EXPANDED); hItem = TreeView_InsertItem(hwndTree, &tvis); } else { TVITEM tvi = {0}; tvi.hItem = hItem; tvi.mask = TVIF_HANDLE | TVIF_PARAM; TreeView_GetItem(hwndTree, &tvi); TreeItem *treeItem = (TreeItem *)tvi.lParam; treeItem->value = SECTIONPARAM_MAKE(indx, sectionLevel, SECTIONPARAM_HAVEPAGE); } } if (sectionName) { *sectionName = '/'; sectionName++; } sectionLevel++; hSection = hItem; } } ShowWindow(hwndTree, SW_SHOW); TreeView_SelectItem(hwndTree, FindNamedTreeItemAt(hwndTree, 0, NULL)); } break; // Rebuild preview to new section case DM_REBUILDICONSPREVIEW: { SectionItem* sectionActive = (SectionItem*)lParam; EnableWindow(hPreview, sectionActive != NULL); ListView_DeleteAllItems(hPreview); HIMAGELIST hIml = ListView_GetImageList(hPreview, LVSIL_NORMAL); ImageList_RemoveAll(hIml); if (sectionActive == NULL) break; LVITEM lvi = {0}; lvi.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM; { mir_cslock lck(csIconList); for (int indx = 0; indx < iconList.getCount(); indx++) { IcolibItem *item = iconList[indx]; if (item->section == sectionActive) { lvi.pszText = item->getDescr(); HICON hIcon = item->temp_icon; if (!hIcon) hIcon = IconItem_GetIcon_Preview(item); lvi.iImage = ImageList_AddIcon(hIml, hIcon); lvi.lParam = indx; ListView_InsertItem(hPreview, &lvi); if (hIcon != item->temp_icon) SafeDestroyIcon(&hIcon); } } } if (sectionActive->flags & SIDF_SORTED) ListView_SortItems(hPreview, DoSortIconsFunc, 0); else ListView_SortItems(hPreview, DoSortIconsFuncByOrder, 0); } break; // Refresh preview to new section case DM_UPDATEICONSPREVIEW: { LVITEM lvi = {0}; HICON hIcon; int indx, count; HIMAGELIST hIml = ListView_GetImageList(hPreview, LVSIL_NORMAL); lvi.mask = LVIF_IMAGE|LVIF_PARAM; count = ListView_GetItemCount(hPreview); for (indx = 0; indx < count; indx++) { lvi.iItem = indx; ListView_GetItem(hPreview, &lvi); { mir_cslock lck(csIconList); hIcon = iconList[lvi.lParam]->temp_icon; if (!hIcon) hIcon = IconItem_GetIcon_Preview(iconList[lvi.lParam]); } if (hIcon) ImageList_ReplaceIcon(hIml, lvi.iImage, hIcon); if (hIcon != iconList[lvi.lParam]->temp_icon) SafeDestroyIcon(&hIcon); } ListView_RedrawItems(hPreview, 0, count); } break; // Temporary change icon - only inside options dialog case DM_CHANGEICON: { LVITEM lvi = {0}; lvi.mask = LVIF_PARAM; lvi.iItem = wParam; ListView_GetItem(hPreview, &lvi); { mir_cslock lck(csIconList); IcolibItem *item = iconList[ lvi.lParam ]; SAFE_FREE((void**)&item->temp_file); SafeDestroyIcon(&item->temp_icon); TCHAR *path = (TCHAR*)lParam; item->temp_file = mir_tstrdup(path); item->temp_icon = (HICON)ExtractIconFromPath(path, item->cx, item->cy); item->temp_reset = FALSE; } DoOptionsChanged(hwndDlg); } break; case WM_COMMAND: if (LOWORD(wParam) == IDC_IMPORT) { dat->hwndIndex = CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_ICOLIB_IMPORT), GetParent(hwndDlg), DlgProcIconImport, (LPARAM)hwndDlg); EnableWindow((HWND)lParam, FALSE); } else if (LOWORD(wParam) == IDC_GETMORE) { OpenIconsPage(); break; } else if (LOWORD(wParam) == IDC_LOADICONS) { TCHAR filetmp[1] = {0}; TCHAR *file; if (file = OpenFileDlg(hwndDlg, filetmp, FALSE)) { HWND htv = GetDlgItem(hwndDlg, IDC_CATEGORYLIST); TCHAR filename[ MAX_PATH ]; PathToRelativeT(file, filename); SAFE_FREE((void**)&file); MySetCursor(IDC_WAIT); LoadSubIcons(htv, filename, TreeView_GetSelection(htv)); MySetCursor(IDC_ARROW); DoOptionsChanged(hwndDlg); } } break; case WM_CONTEXTMENU: if ((HWND)wParam == hPreview) { UINT count = ListView_GetSelectedCount(hPreview); if (count > 0) { int cmd = OpenPopupMenu(hwndDlg); switch(cmd) { case ID_CANCELCHANGE: case ID_RESET: { LVITEM lvi = {0}; int itemIndx = -1; while ((itemIndx = ListView_GetNextItem(hPreview, itemIndx, LVNI_SELECTED)) != -1) { lvi.mask = LVIF_PARAM; lvi.iItem = itemIndx; //lvhti.iItem; ListView_GetItem(hPreview, &lvi); UndoChanges(lvi.lParam, cmd); } DoOptionsChanged(hwndDlg); break; } } } } else { HWND htv = GetDlgItem(hwndDlg, IDC_CATEGORYLIST); if ((HWND)wParam == htv) { int cmd = OpenPopupMenu(hwndDlg); switch(cmd) { case ID_CANCELCHANGE: case ID_RESET: UndoSubItemChanges(htv, TreeView_GetSelection(htv), cmd); DoOptionsChanged(hwndDlg); break; } } } break; case WM_NOTIFY: switch(((LPNMHDR)lParam)->idFrom) { case 0: switch(((LPNMHDR)lParam)->code) { case PSN_APPLY: { mir_cslock lck(csIconList); for (int indx = 0; indx < iconList.getCount(); indx++) { IcolibItem *item = iconList[indx]; if (item->temp_reset) { db_unset(NULL, "SkinIcons", item->name); if (item->source_small != item->default_icon) { IconSourceItem_Release(&item->source_small); } } else if (item->temp_file) { db_set_ts(NULL, "SkinIcons", item->name, item->temp_file); IconSourceItem_Release(&item->source_small); SafeDestroyIcon(&item->temp_icon); } } } DoIconsChanged(hwndDlg); return TRUE; } break; case IDC_PREVIEW: if (((LPNMHDR)lParam)->code == LVN_GETINFOTIP) { IcolibItem *item; NMLVGETINFOTIP *pInfoTip = (NMLVGETINFOTIP *)lParam; LVITEM lvi; lvi.mask = LVIF_PARAM; lvi.iItem = pInfoTip->iItem; ListView_GetItem(pInfoTip->hdr.hwndFrom, &lvi); if (lvi.lParam < iconList.getCount()) { item = iconList[lvi.lParam]; if (item->temp_file) _tcsncpy(pInfoTip->pszText, item->temp_file, pInfoTip->cchTextMax); else if (item->default_file) mir_sntprintf(pInfoTip->pszText, pInfoTip->cchTextMax, _T("%s, %d"), item->default_file, item->default_indx); } } if (bNeedRebuild) { bNeedRebuild = FALSE; SendMessage(hwndDlg, DM_REBUILD_CTREE, 0, 0); } break; case IDC_CATEGORYLIST: switch(((NMHDR*)lParam)->code) { case TVN_SELCHANGEDA: // !!!! This needs to be here - both !! case TVN_SELCHANGEDW: { NMTREEVIEW *pnmtv = (NMTREEVIEW*)lParam; TVITEM tvi = pnmtv->itemNew; TreeItem *treeItem = (TreeItem *)tvi.lParam; if (treeItem) SendMessage(hwndDlg, DM_REBUILDICONSPREVIEW, 0, (LPARAM)( (SECTIONPARAM_FLAGS(treeItem->value)&SECTIONPARAM_HAVEPAGE)? sectionList[ SECTIONPARAM_INDEX(treeItem->value) ] : NULL)); break; } case TVN_DELETEITEMA: // no idea why both TVN_SELCHANGEDA/W should be there but let's keep this both too... case TVN_DELETEITEMW: { TreeItem *treeItem = (TreeItem *)(((LPNMTREEVIEW)lParam)->itemOld.lParam); if (treeItem) { mir_free(treeItem->paramName); mir_free(treeItem); } break; } } if (bNeedRebuild) { { mir_cslock lck(csIconList); bNeedRebuild = FALSE; } SendMessage(hwndDlg, DM_REBUILD_CTREE, 0, 0); } } break; case WM_DESTROY: SaveCollapseState( GetDlgItem(hwndDlg, IDC_CATEGORYLIST)); DestroyWindow(dat->hwndIndex); { mir_cslock lck(csIconList); for (int indx = 0; indx < iconList.getCount(); indx++) { IcolibItem *item = iconList[indx]; SAFE_FREE((void**)&item->temp_file); SafeDestroyIcon(&item->temp_icon); } } SAFE_FREE((void**)&dat); break; } return FALSE; }
INT_PTR CALLBACK DlgProcIconImport(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { static HWND hwndParent, hwndDragOver; static int dragging; static int dragItem, dropHiLite; static HWND hPreview = NULL; switch (msg) { case WM_INITDIALOG: TranslateDialogDefault(hwndDlg); hwndParent = (HWND)lParam; hPreview = GetDlgItem(hwndDlg, IDC_PREVIEW); dragging = dragItem = 0; ListView_SetImageList(hPreview, ImageList_Create(GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), ILC_COLOR32|ILC_MASK, 0, 100), LVSIL_NORMAL); ListView_SetIconSpacing(hPreview, 56, 67); { RECT rcThis, rcParent; int cxScreen = GetSystemMetrics(SM_CXSCREEN); GetWindowRect(hwndDlg, &rcThis); GetWindowRect(hwndParent, &rcParent); OffsetRect(&rcThis, rcParent.right-rcThis.left, 0); OffsetRect(&rcThis, 0, rcParent.top-rcThis.top); GetWindowRect(GetParent(hwndParent), &rcParent); if (rcThis.right > cxScreen) { OffsetRect(&rcParent, cxScreen-rcThis.right, 0); OffsetRect(&rcThis, cxScreen-rcThis.right, 0); MoveWindow(GetParent(hwndParent), rcParent.left, rcParent.top, rcParent.right-rcParent.left, rcParent.bottom-rcParent.top, TRUE); } MoveWindow(hwndDlg, rcThis.left, rcThis.top, rcThis.right-rcThis.left, rcThis.bottom-rcThis.top, FALSE); GetClientRect(hwndDlg, &rcThis); SendMessage(hwndDlg, WM_SIZE, 0, MAKELPARAM(rcThis.right-rcThis.left, rcThis.bottom-rcThis.top)); } SHAutoComplete( GetDlgItem(hwndDlg, IDC_ICONSET), 1); SetDlgItemText(hwndDlg, IDC_ICONSET, _T("icons.dll")); return TRUE; case DM_REBUILDICONSPREVIEW: { MySetCursor(IDC_WAIT); ListView_DeleteAllItems(hPreview); HIMAGELIST hIml = ListView_GetImageList(hPreview, LVSIL_NORMAL); ImageList_RemoveAll(hIml); TCHAR filename[MAX_PATH], caption[64]; GetDlgItemText(hwndDlg, IDC_ICONSET, filename, SIZEOF(filename)); { RECT rcPreview, rcGroup; GetWindowRect(hPreview, &rcPreview); GetWindowRect( GetDlgItem(hwndDlg, IDC_IMPORTMULTI), &rcGroup); //SetWindowPos(hPreview, 0, 0, 0, rcPreview.right-rcPreview.left, rcGroup.bottom-rcPreview.top, SWP_NOZORDER|SWP_NOMOVE); } if ( _taccess(filename, 0) != 0) { MySetCursor(IDC_ARROW); break; } LVITEM lvi; lvi.mask = LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM; lvi.iSubItem = 0; lvi.iItem = 0; int count = (int)_ExtractIconEx(filename, -1, 16, 16, NULL, LR_DEFAULTCOLOR); for (int i=0; i < count; lvi.iItem++, i++) { mir_sntprintf(caption, SIZEOF(caption), _T("%d"), i+1); lvi.pszText = caption; HICON hIcon; _ExtractIconEx(filename, i, 16, 16, &hIcon, LR_DEFAULTCOLOR); lvi.iImage = ImageList_AddIcon(hIml, hIcon); DestroyIcon(hIcon); lvi.lParam = i; ListView_InsertItem(hPreview, &lvi); } MySetCursor(IDC_ARROW); } break; case WM_COMMAND: switch(LOWORD(wParam)) { case IDC_BROWSE: { TCHAR str[MAX_PATH], *file; GetDlgItemText(hwndDlg, IDC_ICONSET, str, SIZEOF(str)); if (!(file = OpenFileDlg(GetParent(hwndDlg), str, TRUE))) break; SetDlgItemText(hwndDlg, IDC_ICONSET, file); SAFE_FREE((void**)&file); } break; case IDC_GETMORE: OpenIconsPage(); break; case IDC_ICONSET: if (HIWORD(wParam) == EN_CHANGE) SendMessage(hwndDlg, DM_REBUILDICONSPREVIEW, 0, 0); break; } break; case WM_MOUSEMOVE: if (dragging) { LVHITTESTINFO lvhti; int onItem = 0; HWND hwndOver; RECT rc; POINT ptDrag; HWND hPPreview = GetDlgItem(hwndParent, IDC_PREVIEW); lvhti.pt.x = (short)LOWORD(lParam); lvhti.pt.y = (short)HIWORD(lParam); ClientToScreen(hwndDlg, &lvhti.pt); hwndOver = WindowFromPoint(lvhti.pt); GetWindowRect(hwndOver, &rc); ptDrag.x = lvhti.pt.x - rc.left; ptDrag.y = lvhti.pt.y - rc.top; if (hwndOver != hwndDragOver) { ImageList_DragLeave(hwndDragOver); hwndDragOver = hwndOver; ImageList_DragEnter(hwndDragOver, ptDrag.x, ptDrag.y); } ImageList_DragMove(ptDrag.x, ptDrag.y); if (hwndOver == hPPreview) { ScreenToClient(hPPreview, &lvhti.pt); if (ListView_HitTest(hPPreview, &lvhti) != -1) { if (lvhti.iItem != dropHiLite) { ImageList_DragLeave(hwndDragOver); if (dropHiLite != -1) ListView_SetItemState(hPPreview, dropHiLite, 0, LVIS_DROPHILITED); dropHiLite = lvhti.iItem; ListView_SetItemState(hPPreview, dropHiLite, LVIS_DROPHILITED, LVIS_DROPHILITED); UpdateWindow(hPPreview); ImageList_DragEnter(hwndDragOver, ptDrag.x, ptDrag.y); } onItem = 1; } } if (!onItem && dropHiLite != -1) { ImageList_DragLeave(hwndDragOver); ListView_SetItemState(hPPreview, dropHiLite, 0, LVIS_DROPHILITED); UpdateWindow(hPPreview); ImageList_DragEnter(hwndDragOver, ptDrag.x, ptDrag.y); dropHiLite = -1; } MySetCursor(onItem ? IDC_ARROW : IDC_NO); } break; case WM_LBUTTONUP: if (dragging) { ReleaseCapture(); ImageList_EndDrag(); dragging = 0; if (dropHiLite != -1) { TCHAR path[MAX_PATH], fullPath[MAX_PATH], filename[MAX_PATH]; LVITEM lvi; GetDlgItemText(hwndDlg, IDC_ICONSET, fullPath, SIZEOF(fullPath)); PathToRelativeT(fullPath, filename); lvi.mask = LVIF_PARAM; lvi.iItem = dragItem; lvi.iSubItem = 0; ListView_GetItem(hPreview, &lvi); mir_sntprintf(path, SIZEOF(path), _T("%s,%d"), filename, (int)lvi.lParam); SendMessage(hwndParent, DM_CHANGEICON, dropHiLite, (LPARAM)path); ListView_SetItemState( GetDlgItem(hwndParent, IDC_PREVIEW), dropHiLite, 0, LVIS_DROPHILITED); } } break; case WM_NOTIFY: switch (((LPNMHDR)lParam)->idFrom) { case IDC_PREVIEW: switch (((LPNMHDR)lParam)->code) { case LVN_BEGINDRAG: SetCapture(hwndDlg); dragging = 1; dragItem = ((LPNMLISTVIEW)lParam)->iItem; dropHiLite = -1; ImageList_BeginDrag(ListView_GetImageList(hPreview, LVSIL_NORMAL), dragItem, GetSystemMetrics(SM_CXICON)/2, GetSystemMetrics(SM_CYICON)/2); { POINT pt; RECT rc; GetCursorPos(&pt); GetWindowRect(hwndDlg, &rc); ImageList_DragEnter(hwndDlg, pt.x - rc.left, pt.y - rc.top); hwndDragOver = hwndDlg; } break; } break; } break; case WM_SIZE: // make the dlg resizeable if (!IsIconic(hwndDlg)) { UTILRESIZEDIALOG urd = {0}; urd.cbSize = sizeof(urd); urd.hInstance = hInst; urd.hwndDlg = hwndDlg; urd.lParam = 0; // user-defined urd.lpTemplate = MAKEINTRESOURCEA(IDD_ICOLIB_IMPORT); urd.pfnResizer = IconDlg_Resize; CallService(MS_UTILS_RESIZEDIALOG, 0, (LPARAM)&urd); } break; case WM_CLOSE: DestroyWindow(hwndDlg); EnableWindow( GetDlgItem(hwndParent, IDC_IMPORT), TRUE); break; } return FALSE; }