香港明星足球队队员:基于formview的程序如何加入属性单?

来源:百度文库 编辑:高校问答 时间:2024/05/05 08:45:19
刚学VC的MFC编程,表述可能不准确:
建立一个基于formview的程序,我想在开始加入一个属性表(用PropertySheet,应是非模态的吧,因为我想加入后能同时操纵菜单),可我不知道应在哪里加入?如何加入?
如果是用CTabCtrl的话,又该如何加入?应该在哪里初始化呢?
最好给个例子.

propertysheet是模态的。
你想加入后能同时操作菜单,那就不能用propertysheet,用tabctrl。

相关的TABCTRL的用法请看下面的代码。

#include "stdafx.h"
#include "resource.h"
#include <commctrl.h>
#pragma comment(lib,"comctl32.lib")

static HINSTANCE g_hInst;
static HWND g_hTabCtrl;
static HWND g_hTabSheet1;
static HWND g_hTabSheet2;

LRESULT CALLBACK TabSheetProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg){
case WM_INITDIALOG:
return true;
}
return false;
}

static BOOL CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
TCITEM tc;
RECT rt;
NMHDR *nm = (NMHDR *)lParam;
LPPOINT pt = (LPPOINT)&rt;

switch(msg)
{
case WM_INITDIALOG:
InitCommonControls();
g_hTabCtrl=GetDlgItem(hDlg,IDC_TAB);

tc.mask = TCIF_TEXT;
tc.pszText = "1";
TabCtrl_InsertItem(g_hTabCtrl,0,&tc);
tc.mask = TCIF_TEXT;
tc.pszText = "2";
TabCtrl_InsertItem(g_hTabCtrl,1,&tc);
g_hTabSheet1 = CreateDialog(g_hInst,(LPCTSTR)IDD_DIALOG_SHEET1,hDlg,(DLGPROC)TabSheetProc);
g_hTabSheet2 = CreateDialog(g_hInst,(LPCTSTR)IDD_DIALOG_SHEET2,hDlg,(DLGPROC)TabSheetProc);

GetClientRect(g_hTabCtrl,&rt);
TabCtrl_AdjustRect(g_hTabCtrl,false,&rt);
MapWindowPoints(g_hTabCtrl,hDlg,pt,2);

MoveWindow(g_hTabSheet1,rt.left,rt.top,rt.right=rt.left,rt.bottom-rt.top,false);
MoveWindow(g_hTabSheet2,rt.left,rt.top,rt.right=rt.left,rt.bottom-rt.top,false);

ShowWindow(g_hTabSheet1,SW_SHOW);

break;
case WM_COMMAND:
if ((LOWORD(wParam)==IDCANCEL)||(LOWORD(wParam)==IDOK))
EndDialog(g_hTabSheet1,false);
EndDialog(g_hTabSheet2,false);
EndDialog(g_hTabCtrl,false);
break;
case WM_NOTIFY:
switch(nm->code){
case TCN_SELCHANGE:
if(nm->hwndFrom==g_hTabCtrl)
{
switch(TabCtrl_GetCurSel(g_hTabCtrl)){
case 0:
ShowWindow(g_hTabSheet1,true);
ShowWindow(g_hTabSheet2,false);
break;
case 1:
ShowWindow(g_hTabSheet1,false);
ShowWindow(g_hTabSheet2,true);
break;
}
}
break;
}
return true;

case WM_CLOSE:
EndDialog(g_hTabSheet1,false);
EndDialog(g_hTabSheet2,false);
EndDialog(g_hTabCtrl,false);
return true;
default:
return false;
}
// return true;
}

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR line, int show)
{
g_hInst = hInst;
if(DialogBox(hInst,"IDD_DIALOG",NULL,DlgProc)==-1)
{
return 0;
}
return 0;
}