Path[MAX_PATH]; // MAX_PATH 在 API 中定义了吧,好象是 128 GetModuleFileName(NULL,exeFullPath,MAX_PATH) 7. 获得各种目录信息 Windows 目录: Use "GetWindowsDirectory“ Windows 下的 system 目录: Use "GetSystemDirectory" temp 目录: Use "GetTempPath " 当前目录: Use "GetCurrentDirectory" 请注意前两个函数的第一个参数为 目录变量名, 后一个为缓冲区; 后两个相反. 8. 如何自定义消息 也有人问过的,其实不难。 (1) 手工定义消息,可以这么写 #define WM_MY_MESSAGE(WM_USER+100),MS 推 荐的至少是 WM_USER+100; (2)写消息处理函数,用 WPARAM,LPARAM 返回 LRESULT. LRESULT CMainFrame::OnMyMessage(WPARAM wparam,LPARAM lParam) { //加入你的处理函数 } (3) 在类的 AFX_MSG 处进行声明,也就是常说的"宏映射" 9. 如何改变窗口的图标? 向窗口发送 WM_SECTION 消息。 Example: HICON hIcon=AfxGetApp() ->LoadIcon(IDI_ICON); ASSERT(hIcon); AfxGetMainWnd() ->SendMessage(WM_SECTION,TRUE,(LPARAM) hIcon); 10. 如何改变窗口的 缺省风格? 重栽 CWnd:: PreCreateWindow 并修改 CREATESTRUCT 结构来指定窗口风格和其 他创建信息. Example: Delete "Max" Button and Set Original Window's Position and Size
BOOL CMainFrame:: PreCreateWindow (CREATESTRUCT &;cs) { cs.style &;=~WS_MAXINIZEMOX; cs.x=cs.y=0; cs.cx=GetSystemMetrics(SM_CXSCREEN/2); cs.cy=GetSystemMetrics(SM_CYSCREEN/2); return CMDIFramewnd ::PreCreateWindow(cs); } 11. 如何将窗口居中显示? Easy, Call Function CWnd:: Center Windows Example(1): Center Window( ); //Relative to it's parent // Relative to Screen Example(2): Center Window(CWnd:: GetDesktopWindow( )); //Relative to Application's MainWindow AfxGetMainWnd( ) -> Center Window( ); 12. 如何让窗口和 MDI 窗口一启动就最大化和最小化? 先说窗口。 在 InitStance 函数中设定 m_nCmdShow 的 取值. m_nCmdShow=SW_SHOWMAXMIZED ; //最大化 m_nCmdShow=SW_SHOWMINMIZED ; //最小化 m_nCmdShow=SW_SHOWNORMAL ; //正常方式 MDI 窗口: 如果是创建新的应用程序,可以用 MFC AppWizard 的 Advanced 按钮并 在 MDI 子窗口风格组中检测最大化或最小化; 还可以重载 MDI Window 的 P
reCreateWindow 函数,设置 WS_MAXMIZE or WS_MINMIZE; 如果从 CMDIChildWnd 派生,调用 OnInitialUpdate 函数中的 CWnd::Show,Window 来指定 MDI Child Window 的 风格。 13. 如何使程序保持极小状态? 很有意思的问题 这么办: 在恢复程序窗体大小时, Windows 会发送 WM_QUERY-OPEN 消息, 用 ClassWizard 设置成员函数 OnQueryOpen() ,add following code: Bool CMainFrame:: OnQueryOpen( ) { Return false; }
14. 如何限制窗口的 大小? 也就是 FixedDialog 形式。 Windows 发送 WM_GETMAXMININFO 消息来跟踪 , 响应它,在 OnGetMAXMININFO 中写代码: 15. 如何使窗口不可见? 很简单,用 SW_HIDE 隐藏窗口,可以结合 FindWindow,ShowWindow 控制.
16. 如何使窗口始终在最前方? 两种途径. BringWindowToTop(Handle); SetWindowPos 函数,指定窗口的 最顶风格,用 WS_EX_TOPMOST 扩展窗口的 风格 Example: void ToggleTopMost( CWnd *pWnd) { ASSERT_VALID(pWnd); pWnd ->SetWindowPos(pWnd-> GetStyle( ) &;WS_EX_TOPMOST)? &;wndNoTopMOST: &;wndTopMost,0,0,0,0,SSP_NOSIZE|WSP_NOMOVE); } 17、如何创建一个字回绕的 CEditView 重载 CWnd : : PreCreateWindow 和修改 CREATESTRUCT 结构,关闭 CEditView 对 象 的 ES_AUTOHSCROLL 和 WS_HSCROLL 风格位, 由于 CEditView : : PreCreateWindow 显示设置 cs. style,调用基类函数后要修改 cs . style。 BOOL CSampleEDitView : : PreCreateWindow (CREATESTRUCT&;cs) { //First call basse class function . BOOL bResutl =