Windows ME 및 Windows 2000에서 시작하여 getOpenFilename ()의 OpenFilename 구조와 GetSaveFilename ()의 세 가지 새로운 요소를 추가합니다. 먼저 살펴 보겠습니다.
OpenFileName을 입력하십시오
LSTRUCTSIZE는 오랫동안 크기입니다
hwndowner
오랫동안 힌트 턴스
lpstrfilter로 문자열
lpstrcustomFilter로 문자열
NMAXCUSTFILTER
nfilterIndex만큼
문자열로 lpstrfile
nmaxfile이 길다
lpStrfileTital으로 문자열
NMAXFILETITAL만큼
문자열로서 lpstrinitialdir
lpstrtital으로 문자열
오랫동안 깃발
정수로서의 nfileoffset
정수로서의 nfileextension
문자열로 lpStrdext
LCUSTDATA
lpfnhook만큼
lptemplename으로 문자열로 표시됩니다
'#if (_win32_winnt> = 0x0500)
PVRESERVED
오랫동안 dwreserved
플래그 텍스 오랫동안
'#endif // (_win32_winnt> = 0x0500)
끝 유형
새로운 요소 PVRESERVED 및 DWRESERVED가 보유되어 있음을 알기가 어렵지 않습니다. . 이 비트 레이블을 설정하여 Windows 2000 (또는 Windows ME)의 왼쪽에있는 빠른 막대를 끄십시오. "파일 열기"대화 상자. 이 바로 가기 막대는 총 5 개의 바로 가기를 저장할 수 있으며, 레지스트리를 수정하여 고유 한 바로 가기를 지정할 수 있습니다. 수정 방법에 관해서는, 오늘날 우리의 주제가 아니므로 당분간 논의하지 않을 것입니다. 그러나 실제로 사용하면 문제가 발견되었습니다.이 새로운 구조를 사용하는 절차는 Windows 98/95/NT4에서 실행할 수 없습니다. 그 이유는 lstructsize를 설정할 때 새로운 세 멤버가 계산되어 구조 길이에서 12 바이트가 증가하고 Comdlg32.dll의 기존 버전을 식별 할 수없고 구조 길이가 잘못되기 때문일 수 있습니다. 결과는 "파일 열기"와 "파일 저장"대화 상자를 표시 할 수 없다는 것입니다.
이 문제를 고려하여 다음 아이디어를 사용하여 getversionex () 함수를 사용하여 Windows ME와 Windows 2000이 아닌 경우 LEN으로 OpenFilename 구조의 길이를 계산 한 후 12 바이트를 빼십시오. () 다음 lstructsize에 값을 할당하십시오. 이러한 방식으로 Comdlg32.dll의 버전은 세 가지 새로운 요소를 무시합니다. 연습 후,이 방법은 가능하다는 것을 증명합니다.
물론 특정 소프트웨어의 설치로 인해 특정 소프트웨어가 설치되어 새로운 기능을 사용할 수 있도록 새로운 버전의 comdlg32.dll이있을 수 있습니다. 따라서 가장 좋은 방법은 comdlg32.dll 자체의 버전을 감지 한 다음 OpenFilename 구조의 길이가 새로운 세 요소의 길이를 무시 해야하는지 여부를 결정하는 것입니다.
중국에서 가장 큰 쿨 스테이션 데모 센터!