- 关闭文件与改变窗口标题
又是一个很水的版本呢...
话说到现在贴吧表情还是没有恢复吗...
首先还是请看到代码的开头.
winmain.c
char strFilename[400], strFiletitle[144];
char sztitle[200];
const char strFilter[] = "Text File(*.txt)\0*.txt\0All Files\0*.*\0\0";
char *filebuf;
int inpstatu[8];
在这里, sztitle是用于重新设置窗口标题时使用的字符串, inpstatu数组则用于存储程序的状态.
接下来是设置窗口标题的函数:
winmain.c
void init_changetitle(void)
{
if(strFiletitle[0] == 0x00) {
sprintf(sztitle, "Untitled - VC iNotepad");
} else {
sprintf(sztitle, "%s - VC iNotepad", strFiletitle);
}
SetWindowText(hWinMain, sztitle);
}
暂时认为当strFiletitle的首字节为0时, 我们还没有选择文件 (后面则会用到inpstatu数组), 这是窗口标题为"Untitled"(无标题), 否则为选择文件的文件名.
接着是open_fileset的一些修改:
winmain.c
int open_fileset(void)
{
........
SetWindowText(hRichEdit, filebuf);
inpstatu[0] = 1;
init_changetitle();
......
}
在显示文本之后, 首先将inpstatu的第0位设置为1, 在这里是是否加载文件的标志位, 然后修改窗口标题.
再接下来是iNotepadVCProc中的INITDIALOG部分.
winmain.c
BOOL CALLBACK iNotepadVCProc(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam)
{
HICON hIcon;
switch(uMessage) {
case WM_INITDIALOG:
hWinMain = hWnd;
memset(strFilename, 0, 400);
memset(strFiletitle, 0, 144);
memset(sztitle, 0, 200);
memset(inpstatu, 0, sizeof(int)*8);
......
init_changetitle();
break;
在这里另初始化了szTitle和inpstatu, 并且初始化了标题.
最后是关闭文件的部分, 即IDMU_NEWF(“File"菜单 “New"菜单项)的响应函数.
winmain.c
case WM_COMMAND:
switch(wParam) {
case IDMU_NEWF:
SetWindowText(hRichEdit, "\0");
memset(strFilename, 0, 400);
memset(strFiletitle, 0, 144);
inpstatu[1] = 0;
init_changetitle();
break;
看来在这里几乎也是执行者相同的操作. 先将RichEdit清空, 然后消除strFilename和strFiletitle, 最后消除标记, 修改标题.
运行效果如下: