您的位置:首页 > 其它

mapgis6.7二次开发vc6_demo 之一(主窗体构架)

2012-04-18 17:49 197 查看
mapgis6.7二次开发vc6_demo 之一(主窗体构架)

本文根据mapgis6.7 sdk开发包中实例程序和help.chm帮助文件

进行的学习心得总结:

//stdafx.h文件内容如下所示 :

#include <windows.h>

//#include "demo.h" 文件内容如下所示 :

//#include "demo.h"
#if !defined(AFX_DEMO_H__8E07CFE6_850E_11D4_9287_444553540000__INCLUDED_)

#define AFX_DEMO_H__8E07CFE6_850E_11D4_9287_444553540000__INCLUDED_

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000

#include "resource.h"

#include "string.h"
#include <iostream>
#include <comutil.h>
using namespace std;

//定义函数声明

int DoWMCommand( HWND hWnd, WPARAM wParam, LPARAM lParam);

LRESULT CALLBACK  WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK  GrpProc(HWND, UINT, WPARAM, LPARAM);

BOOL _InitWindow(int nCmdShow);
BOOL _InitWindowFirst(void);
BOOL _InitWindowEvery(int nCmdShow);

void _EnableWinMenu(void);

short LoadFiles(short type);
short SaveFiles(short type);
short SaveFilesAs(short type);
short CloseFiles(short type);
void DispADotLable(HDC hdc,long i);
void DispAllDotLable(HDC hdc);
void _DispAbout(void);
//
void _ProcLBUTTONDOWN(HWND hWnd, UINT msg,WPARAM wParam, LPARAM lParam);
void _ProcLBUTTONUP(  HWND hWnd, UINT msg,WPARAM wParam, LPARAM lParam);
void _ProcMOUSEMOVE(  HWND hWnd, UINT msg,WPARAM wParam, LPARAM lParam);
void _ProcRBUTTONUP(HWND hWnd, UINT msg,WPARAM wParam, LPARAM lParam);
void _ProcSETCURSOR(HWND hWnd,WPARAM wParam, LPARAM lParam);

//
void ShowMsg(char* msg);
void Vct_Export();
void D2A_test();

//common op  function  公共操作函数
char* i2cp(int n);
char* l2cp(long n);
char* d2cp(double value);
char* short2cp(short value);
char* getdir_lc(char* s,const char* d);
char* getfilename_lc(char* s,const char* d);
//
char* GetDiskSpace_lc(unsigned char dsk);
//
char* GetCurDir(void);
int WriteToLog(char* str);
int WriteToLog(const char* str);
int WriteToLog_f_delete(void);
char* UnionStr(const char* A,const char* B);
char* strcat_lc(const char* A,const char* B);
const char* StrCopy(const char* src);
char* strcpy_lc(const char* src);
bool EqStr(const char* A,const char* B);
bool IsNumber(string str);
//file op function 文件操作函数
//----------------------------
//文件操作方法
void f_SetFilePath(char* pfilepath);
int f_delete(char* pfilepath);
bool f_OpenFile_r(void);
bool f_OpenFile_w(void);
int f_EndFile(void);
char* f_NextLine();
int f_WriteLine(char* line);
int f_FlushFile(void);
int f_CloseFile(void);
//----------------------------
bool OutVctHeadBeginEnd();                        //输出vct文件头
bool OutVctFeatureCodeBeginEnd(short* ptALst);    //输出vct要素代码
bool OutVctTableStructureBeginEnd(short* ptALst); //输出vct表结构
//输出线坐标 OK
bool OutVctLineBeginEnd(short ai);
//输出属性值 OK
bool OutVctAttributeBeginEnd(short ai);
//----------------------------

#endif // !defined(AFX_DEMO_H__8E07CFE6_850E_11D4_9287_444553540000__INCLUDED_)


//Resource.h文件内容如下所示 :
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by demo.rc
//
#define IDMN_NULL                       0x0000
#define PAINTING                        0x0004
#define IDD_DIALOG_VCT_EXP              102
#define IDR_MENU1                       132
#define IDC_DEMO                        132
#define IDC_LIST1                       1000
#define IDC_EDIT1                       1001
#define IDC_BTN_SAVEVCTAS               1002
#define IDMN_LOAD_PNT                   32771
#define IDMN_SAVE_PNT                   32772
#define IDMN_SAVE_PNT_AS                32773
#define IDMN_CLOSE_PNT                  32774
#define IDMN_LOAD_LIN                   32775
#define IDMN_SAVE_LIN                   32776
#define IDMN_SAVE_LIN_AS                32777
#define IDMN_CLOSE_LIN                  32778
#define IDMN_LOAD_REG                   32779
#define IDMN_SAVE_REG                   32780
#define IDMN_SAVE_REG_AS                32781
#define IDMN_CLOSE_REG                  32782
#define IDMN_CLOSE_FILE                 32783
#define IDMN_EXIT                       32784
#define IDMN_MOD_ENV                    32791
#define IDMN_DOT_VIEWABLE               32792
#define IDMN_ARC_VIEWABLE               32793
#define IDMN_ORIGNAL_DISP               32794
#define IDMN_ABOUT                      32795
#define IDMN_VCT_EXPORT                 40001
#define IDMN_ENLG_WIN_C                 40002
#define IDMN_REDU_WIN_C                 40003
#define IDMN_MOVE_WIN_C                 40004
#define IDMN_REST_WIN_C                 40005
#define IDMN_UPDT_WIN_C                 40006
#define IDMN_CLEA_WIN_C                 40007
#define IDMN_D2A                        40008

// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        103
#define _APS_NEXT_COMMAND_VALUE         40009
#define _APS_NEXT_CONTROL_VALUE         1003
#define _APS_NEXT_SYMED_VALUE           101
#endif
#endif


//demo.rc文件内容如下所示:主窗体的资源文件内容 菜单的定义

//Microsoft Developer Studio generated resource script.
//
#include "resource.h"

#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"

/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////
// Chinese (中国) resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
#ifdef _WIN32
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
#pragma code_page(936)
#endif //_WIN32

/////////////////////////////////////////////////////////////////////////////
//
// Menu
//

IDC_DEMO MENU DISCARDABLE
BEGIN
POPUP "&F文件"
BEGIN
MENUITEM "&P装入点",                    IDMN_LOAD_PNT
MENUITEM "存   点",                     IDMN_SAVE_PNT
MENUITEM "换名存点",                    IDMN_SAVE_PNT_AS
MENUITEM "关闭点文件",                  IDMN_CLOSE_PNT
MENUITEM SEPARATOR
MENUITEM "&L装入线",                    IDMN_LOAD_LIN
MENUITEM "存   线",                     IDMN_SAVE_LIN
MENUITEM "换名存线",                    IDMN_SAVE_LIN_AS
MENUITEM "关闭线文件",                  IDMN_CLOSE_LIN
MENUITEM SEPARATOR
MENUITEM "&R装入区",                    IDMN_LOAD_REG
MENUITEM "存   区",                     IDMN_SAVE_REG
MENUITEM "换名存区",                    IDMN_SAVE_REG_AS
MENUITEM "关闭区文件",                  IDMN_CLOSE_REG
MENUITEM SEPARATOR
MENUITEM "关闭文件",                    IDMN_CLOSE_FILE, GRAYED
MENUITEM "&X退  出",                    IDMN_EXIT
END
POPUP "&W窗口"
BEGIN
MENUITEM "&L放大窗口",                  IDMN_ENLG_WIN_C, GRAYED
MENUITEM "&S缩小窗口",                  IDMN_REDU_WIN_C, GRAYED
MENUITEM "&M移动窗口",                  IDMN_MOVE_WIN_C, GRAYED
MENUITEM "&R复位窗口",                  IDMN_REST_WIN_C, GRAYED
MENUITEM "&U更新窗口",                  IDMN_UPDT_WIN_C, GRAYED
MENUITEM "&C清窗口",                    IDMN_CLEA_WIN_C, GRAYED
END
POPUP "&O选择"
BEGIN
MENUITEM "&V修改环境",                  IDMN_MOD_ENV
MENUITEM SEPARATOR
MENUITEM "&S坐标点可见?",               IDMN_DOT_VIEWABLE
MENUITEM "&A弧段可见?",                 IDMN_ARC_VIEWABLE
MENUITEM "&O还原显示?",                 IDMN_ORIGNAL_DISP
END
POPUP "&H帮助"
BEGIN
MENUITEM "关于系统",                    IDMN_ABOUT
END
POPUP "&T常用工具"
BEGIN
MENUITEM "输出VCT top0",                IDMN_VCT_EXPORT
MENUITEM "doubleToString一个实例",      IDMN_D2A
END
END

#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//

1 TEXTINCLUDE DISCARDABLE
BEGIN
"resource.h\0"
END

2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END

3 TEXTINCLUDE DISCARDABLE
BEGIN
"\r\n"
"\0"
END

#endif    // APSTUDIO_INVOKED

/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//

IDD_DIALOG_VCT_EXP DIALOG DISCARDABLE  0, 0, 216, 166
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "VCT导出功能"
FONT 10, "System"
BEGIN
DEFPUSHBUTTON   "确定",IDOK,78,145,50,14
PUSHBUTTON      "关闭",IDCANCEL,159,145,50,14
GROUPBOX        "请选择要输出的图层:",IDC_STATIC,7,7,202,99
CONTROL         "List1",IDC_LIST1,"SysListView32",LVS_REPORT |
LVS_SHOWSELALWAYS | LVS_SORTASCENDING | LVS_AUTOARRANGE |
WS_BORDER | WS_GROUP | WS_TABSTOP,13,18,190,84
LTEXT           "输出vct文件路径:",IDC_STATIC,13,110,94,10
EDITTEXT        IDC_EDIT1,14,122,192,10,ES_AUTOHSCROLL
PUSHBUTTON      "...",IDC_BTN_SAVEVCTAS,176,110,29,12
END

/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//

#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO DISCARDABLE
BEGIN
IDD_DIALOG_VCT_EXP, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 209
TOPMARGIN, 7
BOTTOMMARGIN, 159
END
END
#endif    // APSTUDIO_INVOKED

#endif    // Chinese (中国) resources
/////////////////////////////////////////////////////////////////////////////

#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//

/////////////////////////////////////////////////////////////////////////////
#endif    // not APSTUDIO_INVOKED


//MainFrm.cpp文件内容如下所示:

#include "stdafx.h"
#include "resource.h"
#include <stdio.h>
//引用mapgis库头文件
#include "win_area.h"
#include "win_oper.h"
#include "map_out.h"
//
#include "demo.h"
//应用程序标题
char* AppTitle="mapgis6.7二次开发vc6_demo";
//
HINSTANCE     HInst;                       //实例句柄
HWND          MainWnd=NULL;                //主窗口句柄
HWND          GrpWnd=NULL;                 //图形窗口句柄
HCURSOR       DefHCursor=NULL;             //绘图窗口缺省光标
HCURSOR       LargeHCursor=NULL;           //绘图窗口放大光标
HCURSOR       ReduceHCursor=NULL;          //绘图窗口缩小光标
HCURSOR       CrossHCursor=NULL;           //绘图窗口十字光标
int           ComState=0;                  //菜单命令状态
int           CurState=0;                  //当前操作状态
AREA_HINST    AHInst;

//==============   启动入口   ================//
int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpszCmdLine, int nCmdShow )
{
MSG        msg;
HACCEL hlpAccel=NULL;                  //加速键表
if(hPrevInstance)        return(FALSE);
//初始化工作区
AHInst=_InitWorkArea(hInstance);
HInst = hInstance;
//初始化窗体
if(!_InitWindow(nCmdShow))  return(FALSE);
//装载快捷键
hlpAccel=LoadAccelerators(HInst,(LPCTSTR)IDC_DEMO);
//消息循环
while(GetMessage(&msg,NULL,0,0)){
if(!TranslateAccelerator(MainWnd,hlpAccel,&msg)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return(msg.wParam);
}

BOOL _InitWindow(int nCmdShow){
if(!_InitWindowFirst())   return(FALSE);
if(!_InitWindowEvery(nCmdShow))  return(FALSE);
return(TRUE);
}

//创建窗体
//初始化窗体第一次
BOOL _InitWindowFirst(){
WNDCLASS    wc;
DefHCursor=LoadCursor(NULL,IDC_ARROW);               //绘图窗口缺省光标
wc.style        =CS_HREDRAW | CS_VREDRAW ;
wc.lpfnWndProc  =(WNDPROC)WndProc;             //设置回调函数WndProc
wc.cbClsExtra   =0;
wc.cbWndExtra   =0;
wc.hInstance    =HInst;
wc.hIcon        =NULL;                   //LoadIcon(hInstance,"MAP_EDIT");
wc.hCursor      =DefHCursor;     //LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName =(LPCSTR)IDC_DEMO;    //指定菜单栏
wc.lpszClassName="ClipMainClass";
RegisterClass(&wc);

wc.lpfnWndProc  =(WNDPROC)GrpProc;            //设置回调函数GrpProc
wc.cbClsExtra   =sizeof(WORD);
wc.hIcon        =NULL;
wc.lpszMenuName =NULL;
wc.hCursor      =DefHCursor;     //LoadCursor(hInstance,"EditCurPen");
wc.lpszClassName="ClipGrpClass";
RegisterClass(&wc);
return(1);
}

//初始化窗体Every
BOOL _InitWindowEvery(int nCmdShow){
HMENU    hmn;
char    wndName[32];
_ShowMapGisBmp();
hmn=LoadMenu(HInst,(LPCSTR)IDC_DEMO);  //加载菜单栏
LoadString(HInst,4,wndName,32);    //wndName
MainWnd=CreateWindow("ClipMainClass",(LPCSTR)AppTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,               // Default horizontal position.
CW_USEDEFAULT,              // Default vertical position.
CW_USEDEFAULT,                    // Default width.
CW_USEDEFAULT,               // Default height.
NULL,                           // Overlapped windows have no parent.
hmn,                              // Use the window class menu.
HInst,                    // This instance owns this window.
NULL);
ShowWindow(MainWnd,nCmdShow);
UpdateWindow(MainWnd);
_CloseMapGisBmp();
if(MainWnd==NULL)
return(FALSE);
return(TRUE);
}
//装载我的光标函数(从BAS60.DLL组件中)
short LoadMyCursor(void){
HINSTANCE   hinst;
hinst=GetModuleHandle("BAS60.DLL");
LargeHCursor=LoadCursor(hinst,"LargeCursor");       //绘图窗口放大光标
ReduceHCursor=LoadCursor(hinst,"ReduceCursor");     //绘图窗口缩小光标
CrossHCursor=LoadCursor(hinst,"CrossCursor");        //绘图窗口十字光标
return(1);
}
//释放我的光标函数
short DestroyMyCursor(void){
DestroyCursor(LargeHCursor);
DestroyCursor(ReduceHCursor);
DestroyCursor(CrossHCursor);
return(1);
}
//创建Grp窗体 函数
int CreateGrpWindow(HWND hWnd){  //AppTitle
GrpWnd=CreateWindow(
(LPCSTR)"ClipGrpClass",
(LPCSTR)AppTitle,
WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
hWnd,
NULL,
HInst,
NULL
);
if(GrpWnd==NULL){
PostQuitMessage(0);
return(0);
}
return(1);
}

//修改Grp窗体尺寸函数
void ModifyGrpWndSize(LPARAM lParam){
MoveWindow(GrpWnd, 0, 0,LOWORD(lParam),HIWORD(lParam),TRUE);
return;
}
//窗体事件回调函数
LRESULT CALLBACK  WndProc (HWND hWnd, UINT msg,WPARAM wParam, LPARAM lParam){
switch(msg){
case WM_CREATE:
CreateGrpWindow(hWnd);
LoadMyCursor();
break;
case WM_COMMAND:
return(DoWMCommand(hWnd,wParam,lParam));
case WM_SIZE:
ModifyGrpWndSize(lParam);
break;
case WM_CLOSE:   //关闭窗体
if(_CloseAllArea(AHInst)==IDCANCEL)
break;
DestroyWindow(hWnd);
break;
case WM_DESTROY:
DestroyWindow(GrpWnd);
DestroyMyCursor();
PostQuitMessage(0);
break;
case WM_SYSCOMMAND:
_ProcSYSCOMMAND(GrpWnd,msg,wParam,lParam);
return(DefWindowProc(hWnd,msg,wParam,lParam));
break;
case WM_ACTIVATE:
_ProcACTIVATE(GrpWnd,msg,wParam,lParam);
return(DefWindowProc(hWnd,msg,wParam,lParam));
default:
return(DefWindowProc(hWnd,msg,wParam,lParam));
}
return(0);
}
//Grp回调函数
LRESULT CALLBACK  GrpProc(HWND hWnd, UINT msg,WPARAM wParam, LPARAM lParam){
LRESULT rtn=0;
switch(msg){
case WM_CREATE:
_SetPaintFunction(hWnd,_OwnerDraw);
_LockScrollRange(hWnd);
break;
case WM_COMMAND:   //命令处理函数
return(DoWMCommand(hWnd,wParam,lParam));
case WM_PAINT:
_ProcPAINT(hWnd,msg,wParam,lParam);
break;
case WM_LBUTTONDOWN:   //左键按下mouse事件
_ProcLBUTTONDOWN(hWnd,msg,wParam,lParam);
break;
case WM_LBUTTONUP:     //左键按上mouse事件
_ProcLBUTTONUP(hWnd,msg,wParam,lParam);
_EnableWinMenu();
break;
case WM_MOUSEMOVE:     //移动mouse事件
_ProcMOUSEMOVE(hWnd,msg,wParam,lParam);
break;
case WM_RBUTTONUP:     //右键按上mouse事件
_ProcRBUTTONUP(hWnd,msg,wParam,lParam);
_EnableWinMenu();
break;
case WM_VSCROLL:       //水平scroll
_PopupWinImage(hWnd);
_VscrollMap(hWnd,msg,wParam,lParam);
break;
case WM_HSCROLL:       //垂直scroll
_PopupWinImage(hWnd);
_HscrollMap(hWnd,msg,wParam,lParam);
break;
case WM_DESTROY:
_DelWinParam(hWnd);
break;
default:
switch(msg) {
case WM_SYSCOMMAND:
_ProcSYSCOMMAND(hWnd,msg,wParam,lParam);
break;
case WM_ACTIVATE:
_ProcACTIVATE(hWnd,msg,wParam,lParam);
break;
case WM_SETCURSOR:
_ProcSETCURSOR(hWnd,wParam,lParam);
break;
}
rtn=DefWindowProc(hWnd,msg,wParam,lParam);
break;
}
return(rtn);
}

void SetDotViewableFlag(HWND hwnd){
//修改坐标点可见标志
HMENU    hmn;
BOOL fOwnerDraw;
hmn=GetMenu(MainWnd);
fOwnerDraw=GetMenuState(hmn, IDMN_DOT_VIEWABLE,  MF_BYCOMMAND)&MF_CHECKED;
CheckMenuItem(hmn, IDMN_DOT_VIEWABLE,  MF_BYCOMMAND | (fOwnerDraw ? MF_UNCHECKED : MF_CHECKED));
DrawMenuBar(MainWnd);
return;
}

void SetArcViewableFlag(HWND hwnd)
{//弧段可见标志
HMENU    hmn;
BOOL fOwnerDraw;
hmn=GetMenu(MainWnd);
fOwnerDraw=GetMenuState(hmn, IDMN_ARC_VIEWABLE,  MF_BYCOMMAND)&MF_CHECKED;
CheckMenuItem(hmn, IDMN_ARC_VIEWABLE,  MF_BYCOMMAND | (fOwnerDraw ? MF_UNCHECKED : MF_CHECKED));
DrawMenuBar(MainWnd);
return;
}

void SetOrignalDispFlag(HWND hwnd)
{//还原显示标志
HMENU    hmn;
BOOL fOwnerDraw;
hmn=GetMenu(MainWnd);
fOwnerDraw=GetMenuState(hmn, IDMN_ORIGNAL_DISP,  MF_BYCOMMAND)&MF_CHECKED;
CheckMenuItem(hmn, IDMN_ORIGNAL_DISP,  MF_BYCOMMAND | (fOwnerDraw ? MF_UNCHECKED : MF_CHECKED));
DrawMenuBar(MainWnd);
InvalidateRect(hwnd,NULL,TRUE);
UpdateWindow(hwnd);
return;
}

int DoWMCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
{   //执行window message命令
if(GetMenuState(GetMenu(MainWnd),LOWORD(wParam),MF_BYCOMMAND)==MF_GRAYED)
{    //获取菜单状态
return(0);
}
ComState=LOWORD(wParam);
CurState=0;
switch(LOWORD(wParam)){
case IDMN_EXIT: SendMessage(hWnd,WM_CLOSE,0,0);  break;
case IDMN_NULL: break;
case IDMN_LOAD_PNT: LoadFiles(PNT); break;
case IDMN_LOAD_LIN: LoadFiles(LIN); break;
case IDMN_LOAD_REG: LoadFiles(REG); break;
case IDMN_SAVE_PNT: SaveFiles(PNT); break;
case IDMN_SAVE_LIN: SaveFiles(LIN); break;
case IDMN_SAVE_REG: SaveFiles(REG); break;
case IDMN_SAVE_PNT_AS: SaveFilesAs(PNT);break;
case IDMN_SAVE_LIN_AS: SaveFilesAs(LIN);break;
case IDMN_SAVE_REG_AS: SaveFilesAs(REG);break;
case IDMN_CLOSE_PNT: CloseFiles(PNT);break;
case IDMN_CLOSE_LIN: CloseFiles(LIN);break;
case IDMN_CLOSE_REG: CloseFiles(REG);break;
case IDMN_CLOSE_FILE:CloseFiles(-1);break;
//
case IDMN_MOVE_WIN_C:
_PopupWinImage(GrpWnd);
break;
case IDMN_UPDT_WIN_C:
_PopupWinImage(GrpWnd);
InvalidateRect(GrpWnd,NULL,TRUE);
break;
case IDMN_ENLG_WIN_C:    //放大窗体
DefHCursor=LargeHCursor;  //设置光标样式
break;
case IDMN_REDU_WIN_C:    //缩小窗体
DefHCursor=ReduceHCursor;  //设置光标样式
break;
case IDMN_PREV_WIN:    //"上级窗口"
_PrevWindow(GrpWnd);
break;
case IDMN_REST_WIN_C:
_PopupWinImage(GrpWnd);
_RestoreWindow(GrpWnd,NULL,RW_SEL_AREA,AHInst);
break;
case IDMN_CLEA_WIN_C:
_PopupWinImage(GrpWnd);
InvalidateRect(GrpWnd,NULL,TRUE);
break;
case IDMN_MOD_ENV:                 //环境设置
_ModEnv(hWnd);
break;
case IDMN_DOT_VIEWABLE:            /*坐标点可见*/
SetDotViewableFlag(hWnd);
break;
case IDMN_ARC_VIEWABLE:            /*弧段可见*/
SetArcViewableFlag(hWnd);
break;
case IDMN_ORIGNAL_DISP:              /*还原显示*/
SetOrignalDispFlag(GrpWnd);
break;
case IDMN_ABOUT:                   //关于系统
_DispAbout();
break;
case IDMN_VCT_EXPORT:              //VCT导出 topo 0
{
Vct_Export();
}
break;
case IDMN_D2A:  //double转string 一个实例
{
D2A_test();
}
break;
default:
if((LOWORD(wParam)>=IDMN_NUM_ENLG_1)&&
(LOWORD(wParam)<=IDMN_NUM_ENLG_16))
{//固定放大,重新设置窗口显示比例
_ResetWinDispRate(GrpWnd,LOWORD(wParam)-IDMN_NUM_ENLG_1+1.0);
_PopupWinImage(GrpWnd);
InvalidateRect(GrpWnd,NULL,TRUE);
}
if((LOWORD(wParam)>=IDMN_NUM_REDU_1)&&
(LOWORD(wParam)<=IDMN_NUM_REDU_16))
{//固定缩小,重新设置窗口显示比例
_ResetWinDispRate(GrpWnd,1.0/(LOWORD(wParam)-IDMN_NUM_REDU_1+1.0));
_PopupWinImage(GrpWnd);
InvalidateRect(GrpWnd,NULL,TRUE);
}
break;
}
_EnableWinMenu();
return(0);
}

//判断 菜单栏的可用性函数
void _EnableWinMenu(void)
{
HMENU    hmn;
UINT    flag;
short  i,n;
n=_GetAreaNumber(AHInst);       //取打开的工作区数
flag=(n)?MF_ENABLED:MF_GRAYED;  //n>0表示可用,n<=0表示不可用
hmn=GetMenu(MainWnd);
//文件
EnableMenuItem(hmn, IDMN_CLOSE_FILE        ,MF_BYCOMMAND|flag);
//窗口
EnableMenuItem(hmn, IDMN_ENLG_WIN_C   ,MF_BYCOMMAND|flag);
EnableMenuItem(hmn, IDMN_REDU_WIN_C   ,MF_BYCOMMAND|flag);
EnableMenuItem(hmn, IDMN_MOVE_WIN_C   ,MF_BYCOMMAND|flag);
EnableMenuItem(hmn, IDMN_REST_WIN_C   ,MF_BYCOMMAND|flag);
EnableMenuItem(hmn, IDMN_UPDT_WIN_C   ,MF_BYCOMMAND|flag);
EnableMenuItem(hmn, IDMN_CLEA_WIN_C   ,MF_BYCOMMAND|flag);
EnableMenuItem(hmn, IDMN_PREV_WIN     ,MF_BYCOMMAND|flag);
for(i=0;i<16;i++)
{
EnableMenuItem(hmn, IDMN_NUM_ENLG_1+i,MF_BYCOMMAND|flag);
EnableMenuItem(hmn, IDMN_NUM_REDU_1+i,MF_BYCOMMAND|flag);
}
DrawMenuBar(MainWnd);
if(GetMenuState(GetMenu(MainWnd),ComState,MF_BYCOMMAND)==MF_GRAYED)
ComState=0;
switch(ComState)
{
case IDMN_ENLG_WIN:
SetClassLong(GrpWnd,GCL_HCURSOR,(LONG)LargeHCursor);
break;
case IDMN_REDU_WIN:
SetClassLong(GrpWnd,GCL_HCURSOR,(LONG)ReduceHCursor);
break;
case IDMN_MOVE_WIN:
case IDMN_UPDT_WIN:
case IDMN_REST_WIN:
case IDMN_CLEA_WIN:
case IDMN_PREV_WIN:
default:
SetClassLong(GrpWnd, GCL_HCURSOR,(LONG)DefHCursor);
break;
}
return;
}

//======================================================//
///{文件处理
short LoadFiles(short ftype)
{
short   ai;
ai=_OpenArea(AHInst,ftype);
if(ai<=0)
return(0);
if(!_LoadFile(ai))
{
_CloseArea(ai);
return(0);
}
_PopupWinImage(GrpWnd);
_RestoreWindow(GrpWnd,NULL,RW_ALL_AREA,AHInst);
return(ai);
}

short CloseFiles(short type)
{
short *ptArea=NULL;
char  nmStr[32];
short i;
LoadString(HInst,3,nmStr,32);
ptArea=_SelectAreaList(AHInst,MainWnd,type,nmStr);
if(ptArea==NULL)
return(0);
for(i=1;i<=ptArea[0];i++)
_CloseArea(ptArea[i]);
_PopupWinImage(GrpWnd);
_RestoreWindow(GrpWnd,NULL,RW_ALL_AREA,AHInst);
return(1);
}

short SaveFiles(short type)
{
short *areaLst;
short i;
areaLst=_SelectAreaList(AHInst,MainWnd,type,"选择保存文件");
if(areaLst==NULL)      return(0);
for(i=1;i<=areaLst[0];i++)
_SaveFile(areaLst[i]);
return(1);
}

short SaveFilesAs(short type)
{
short *areaLst;
short i;
areaLst=_SelectAreaList(AHInst,MainWnd,type,"选择另存文件");
if(areaLst==NULL)
return(0);
for(i=1;i<=areaLst[0];i++)
_SaveFileAs(areaLst[i]);
return(1);
}

//------------------------------------------------//
//{显示 线点 函数
short DispLinDot(HDC hdc,WIN_ORG *wxy,short ai)
{
long  i,j,ln;
D_DOT *lxy;
long  len;
int   x,y;
HANDLE hdpen;
//选择pen对象
hdpen=SelectObject(hdc, CreatePen(PS_SOLID,1,RGB(255,0,0)));
_GetLinNum(ai,&i,&ln);
for(i=1;i<ln;i++)
{
if(_GetLin(ai,i,&lxy,&len,NULL)<=0)
continue;
for(j=0;j<len;j++,lxy++)
{
x=(int)((lxy->x-wxy->x0)*wxy->r);
y=(int)((lxy->y-wxy->y0)*wxy->r);
MoveToEx(hdc,x-2,y,NULL);
LineTo(hdc,x+2,y);
MoveToEx(hdc,x,y-2,NULL);
LineTo(hdc,x,y+2);
}
}
//删除pen对象
DeleteObject(SelectObject(hdc,hdpen));
return(1);
}
//..........................PAINTSTRUCT *ps
//重新显示图形
void _ReDispGraph(HWND hWnd,MyDC myDC,short *dsp)
{
short ti,i,type;
D_RECT frc;
RECT   rc,wrc;
short  rt;
WIN_ORG         wxy;
PAINTSTRUCT *ps;
HMENU    hmn;
BOOL    arcView;
BOOL       dotView;
if(ComState==IDMN_CLEA_WIN){
ComState=IDMN_NULL;
return;
}
if(dsp==NULL)  return;
//
hmn=GetMenu(MainWnd);
if(MF_CHECKED & GetMenuState(hmn, IDMN_ORIGNAL_DISP,  MF_BYCOMMAND))
{
_SetOriginalDisp(myDC,1);
}
arcView=GetMenuState(hmn, IDMN_ARC_VIEWABLE,  MF_BYCOMMAND)&MF_CHECKED;
dotView=GetMenuState(hmn, IDMN_DOT_VIEWABLE,  MF_BYCOMMAND)&MF_CHECKED;
ps=_GetPaintStruct(myDC);
rc=ps->rcPaint;
_StartWait();
GetClientRect(hWnd,&wrc);
if(!_GetWinDispParam(hWnd,&wxy))
return;
frc.xmin=rc.left/wxy.r +wxy.x0-1;
frc.xmax=rc.right/wxy.r+wxy.x0+1;
frc.ymin=(wrc.bottom-rc.bottom)/wxy.r+wxy.y0-1;
frc.ymax=(wrc.bottom-rc.top)/wxy.r   +wxy.y0+1;
_SetMyDCMode(myDC);
_SetMyDCPalette(myDC);
_SetDispRect(myDC,&frc);    //设置显示范围
_SetDispParam(myDC,wxy.x0,wxy.y0,wxy.r);
for(ti=0;ti<4;ti++)   //循环3次,依次显示 区,线,点,网
{
switch(ti)
{
case 0: type=REG; break;
case 1: type=NET; break;
case 2: type=LIN; break;
case 3: type=PNT; break;
}
for(i=1;i<=dsp[0];i++)
{
if(type!=_GetAreaType(dsp[i]))
continue;
switch(type)
{
case PNT: rt=_DispPntArea(myDC,dsp[i]); break;
case LIN: rt=_DispLinArea(myDC,dsp[i]);
if(dotView)
DispLinDot(ps->hdc,&wxy,dsp[i]);
break;
case REG: rt=_DispRegArea(myDC,dsp[i]);
if(arcView)
_DispLinArea(myDC,dsp[i]);
if(dotView)
DispLinDot(ps->hdc,&wxy,dsp[i]);
break;
case NET: rt=_DispLinArea(myDC,dsp[i]);
if(dotView)
DispLinDot(ps->hdc,&wxy,dsp[i]);
break;
default:  break;
}
if(rt==0)
goto redispEND;
}
}
redispEND:
_EndWait();
return;
}

//.....................................................................PAINTSTRUCT *ps)
//自己绘制函数
void WINAPI _OwnerDraw(HWND hWnd, UINT msg,WPARAM wParam, LPARAM lParam,MyDC myDC)
{
int    state;
short *ptALst=NULL;           //显示工作区表
state=CurState;
CurState=PAINTING;
if((ptALst=_GetDispAreaListAddr(hWnd))!=NULL)
{
_ReDispGraph(hWnd,myDC,ptALst);
}
CurState=state;
return;
}


--the---end------

--vp:hsg----

--create date:2012-04-18---
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: