VC++2005を使っています。ファイルオープンダイアログを用いて
ファイルパスを取得したいのですが、拡張子の指定が上手くいきません。

void GetFilePath( ..., char *ext) { // GetFilePath(..., "txt"); として使用しています
OPENFILENAME ofn;
char szFile[MAX_PATH] = "";
char strExt[64];

if (!strcmp(ext, "txt")) {
wsprintf(strExt, "Text file(*.%s)\0.%s\0All files(*.*)\0*.*\0\0", ext, ext);
}

ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(OPENFILENAME);
//ofn.lpstrFilter = "Text file(*.txt)\0.txt\0All files(*.*)\0*.*\0\0";
ofn.lpstrFilter = strExt;
ofn.lpstrFile = szFile;
ofn.nMaxFile = MAX_PATH;
ofn.lpstrDefExt = ext;
ofn.Flags = OFN_FILEMUSTEXIST;

GetOpenFileName(&ofn);

上手くいかない点1:
ファイルオープンダイアログでのファイル選択時に Text file(*.txt) しか項目に表示されません。
コメントアウトした方の書き方なら、 All file(*.*) も表示されます。

上手くいかない点2:
Text file(*.txt) のばあいでも、拡張子が .txt のファイルが表示されません。
All file(*.*) なら、全てのファイルが問題なく表示されます。

どこに問題があるのでしょうか?よろしくおねがいします。