VC 팁 5가지 실용적인 팁
1. 프로그램이 있는 경로를 가져오는 방법
이 프로그램 자체가 있는 경로를 가져오는 것이다.응용 프로그램 클래스 CxxApp의 헤더 파일에 변수 Cstring m 정의exePath;프로그램 배치에 사용되는 경로 이름은 응용 프로그램 클래스 CxxApp의 InitInstance() 함수에 다음과 같은 문을 포함합니다.
TCHAR m_Path[MAX_PATH];
GetModuleFileName( NULL, m_Path, MAX_PATH ); // ( )
int i = 0, j;
while( m_Path[i]!=0 )
{
if( m_Path[i]=='\' )
j = i;
i++;
}
m_Path[j+1] = '';
m_exePath.Format( "%s", m_Path ); // ( )
이 프로그램이 실행되면 문자열 변수 mexePath에 설치된 것은 프로그램이 있는 경로입니다. 프로그램 이름은 포함되지 않습니다.프로그램의 위치를 가져와서 무슨 소용이 있습니까?
(1) 응용 프로그램과 함께 배치된 데이터 파일 열기: 프로그램을 실행하는 동안 파일 열기 대화 상자를 사용해서 다른 경로 아래의 파일을 열었다면 시스템의 기본 경로가 변경되어 원래 설정한 데이터 파일이 열리지 않을 수도 있습니다. 다음 방법을 사용하면 문제가 없을 수 있습니다.
CFile file;
file.Open( m_exePath+" ", CFile::modeRead );
(2) 프로그램이 실행 중인 임시 파일을 배치한다. 마찬가지로 시스템의 기본 경로가 바뀌면 프로그램에서 생성된 임시 파일은 곳곳에 놓여 스팸 파일이 된다. 다음과 같은 방법으로 임시 파일을 프로그램이 있는 경로 아래에만 놓을 수 있다.
CFile file;
file.Open( m_exePath+" ", CFile::modeCreate | CFile::modeWrite );
……
프로그램이 끝나면 다음과 같은 방법으로 임시 파일을 삭제합니다.
CFile::Remove( m_exePath+" " );
2. 당신의 프로그램에서 다른 프로그램을 어떻게 실행합니까
내 프로그램에서 다른 프로그램을 호출하는 방법은 여러 가지가 있는데 여기서 내가 사용한 두 가지를 소개한다. (1) WinExec() 함수: 일반적인 사용법:
WinExec(m_PathName,SW_SHOWNORMAL);
m_PathName은 실행 파일의 경로 이름입니다.예:
WinExec("C:\Program Files\Internet Explorer\iexplore.exe",SW_SHOWNORMAL);// IE
(2) ShellExecute() 함수: 일반 사용법:
ShellExecute(NULL,NULL,m_PathName,NULL,_T("c:\temp"),SW_SHOWNORMAL);
m_PathName은 열려 있는 프로그램 경로 이름입니다.T(c:\temp)는 작업 디렉토리입니다.WinExec ()와 달리 ShellExecute () 함수는 사용자가 지정한 파일이 인 경우 실행 불가능한 파일을 열 수도 있습니다.txt, 결과는 이 파일을 불러오는 수첩을 열 것입니다.나는 이런 방법으로 내가 만든 도움말 파일 (.chm) 을 호출하면 효과가 매우 좋다.
3. 직렬화를 사용하지 않으면 프로그램이 끝날 때 파일을 어떻게 저장합니까?
문서-뷰 구조에서 직렬 자동 저장 파일은 다양한 VC북에 소개되어 있습니다.현재 문제는 내가 직렬화를 사용하지 않고 직접 저장하는 것이다. 창의 닫기 단추를 눌렀을 때 어떻게 문서를 제시하고 저장하는지.CxxDoc(ClassWizard)를 사용하여 문서 클래스(CxxDoc)에 함수 CanCloseFrame()를 추가하고 파일을 저장할 문을 추가하면 됩니다.예:
//
BOOL CEditDoc::CanCloseFrame(CFrameWnd* pFrame)
{
CFile file;
if(b_Flag) //b_Flag , True
{
int t;
t=::MessageBox(NULL," , ?"," ",
MB_YESNOCANCEL | MB_ICONWARNING); //
if(t==0 || t==IDCANCEL)
return false;
if(t==IDYES)
{
CString sFilter="Text File(*.txt)|*.txt||";
CFileDialog m_Dlg(FALSE,"txt",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,(LPCTSTR)sFilter,NULL); //
int k=m_Dlg.DoModal(); //
if(k==IDCANCEL || k==0)
return false;
m_PathName=m_Dlg.GetPathName(); //
file.Open(m_PathName,CFile::modeCreate | CFile::modeWrite);
file.Write(m_Text,m_TextLen); //
file.Close();
}
}
return CDocument::CanCloseFrame(pFrame);
}
이렇게 하면 창의 닫기 단추를 눌렀을 때 데이터가 수정되면 데이터를 저장할 것을 알리는 대화상자가 뜨고 데이터를 저장할 것을 알립니다.프로그램의 bFlag은 데이터 수정 플래그로서 데이터를 수정할 때 설정해야 합니다. mText는 저장할 데이터를 문서 안에 저장합니다.
4. POSITION은 어떻게 써요?
POSITION 형식 데이터는 여러 목록의 요소의 위치를 나타내는 데 사용되며, 그룹의 하표와 유사하지만 다르다.주요 차이점은 우리가 POSITION형 데이터의 값에 접근할 수 없고 POSITION형 데이터에 대해 가감, 비교 등 연산을 할 수 없다는 것이다.POSITION형 데이터로 목록에 접근할 때 모두 교체법을 사용하는데 일반적인 형식은 다음과 같다.
POSITION pos; // pos
pos = GetHeadPosition(); //
while( pos )
{
x = GetNext(pos); // pos , pos
}
GetNext()는 다음 형식의 반복입니다.
TYPE GetNext(POSITION& rPosition);
우선, 현재pos 위치에 있는 요소를 되돌려줍니다.그리고pos값을 다음 요소 위치로 수정합니다.이렇게 순환할 때 목록에 있는 각 요소의 값을 순서대로 얻을 수 있다.목록 끝에 도달했을 때pos는 NULL이고 순환이 끝납니다.따라서 POSITION형 데이터를 사용할 때, 가감 등의 조작으로 그것을 수정하려고 하지 말고, GetNext () (뒤로 교체) 또는 GetPrev (앞으로 교체) 로 그 값을 반복해서 수정할 수 있습니다.지정한 값에 직접 도달하려면 Find () 함수나 FindIndex () 함수로 지정한 값의 POSITION 값을 얻을 수 있습니다.
POSITION Find(TYPE Value);// Value POSITION ;
POSITION FindIndex(int nIndex);// nIndex POSITION ,nIndex 0 。
예:
pos = FindIndex(5); // 5
x = GetNext(pos); //
한 마디로 하면 POSITION 유형은 여러 종류의 목록과 관련된 클래스에서 제공되고 서로 다른 클래스가 제공하는 함수는 다르지만 사용법은 모두 유사하다.
5. 어떻게 전체 파일 경로에서 파일 이름과 경로 이름을 분리합니까?
경로에서 파일 이름을 분리하려면 다음과 같이 하십시오.
CString GetFileName(CString pathname)
{
for( int i=pathname.GetLength()-1; i>=0; i-- )
{
if( pathname[i]=='\' )
break;
}
return pathname.Mid( i+1 );
}
경로에서 경로 이름을 분리합니다(파일 이름 제외).
CString GetPath(CString pathname)
{
int i = 0, j;
while( i
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.