****************************************************************************** // Program ... : Designer4NTK.PRG // Launch .... : Designer4NTK.EXE // Description : Designer4NTK for NTK's developper. // Make....... : MKRAD Designer4NTK // Date....... : 30/08/06 // Author(s).. : Markus II // Copyright . : (c) 2006 - Markus II / NTK Team All Rights Reserved. ****************************************************************************** // --------------------------- Manifest Windows XP // (remove remarks if you want fancy XP Theme buttons) #define ISOLATION_AWARE_ENABLED 1 // --------------------------- Include NTK #include "windows.ch" #include "ntkcctrl.ch" #include "ntkgdi.ch" #include "ntkmsg.ch" #include "ntkacc.ch" #include "ntkcmd.ch" #include "wNtk.ch" #include "wNtkKeys.ch" #include "ntkbtn.ch" #include "ntkimg.ch" #include "ntkedget.ch" // --------------------------- Define CHAR #define CR CHR(13) // --------------------------- Define BUTTON // For Tools Windows #define ID_BTNT00 8000 #define ID_BTNT01 8001 #define ID_BTNT02 8002 #define ID_BTNT03 8003 #define ID_BTNT04 8004 #define ID_BTNT05 8005 #define ID_BTNT06 8006 #define ID_BTNT07 8007 #define ID_BTNT08 8008 #define ID_BTNT09 8009 #define ID_BTNT10 8010 #define ID_BTNT11 8011 #define ID_BTNT12 8012 #define ID_BTNT13 8013 #define ID_BTNT14 8014 #define ID_BTNT15 8015 #define ID_BTNT16 8016 #define ID_BTNT17 8017 #define ID_BTNT18 8018 #define ID_BTNT19 8019 #define ID_BTNT20 8020 #define ID_BTNT21 8021 #define ID_BTNT22 8022 #define ID_BTNT23 8023 #define ID_BTNT24 8024 #define ID_BTNT25 8025 #define ID_BTNT26 8026 #define ID_BTNT27 8027 #define ID_BTNT28 8028 #define ID_BTNT29 8029 #define ID_BTNT30 8030 #define ID_BTNT31 8031 #define ID_BTNT32 8032 // For Objects Window #define ID_BTNO00 8100 #define ID_BTNO01 8101 #define ID_BTNO02 8102 #define ID_BTNO03 8103 #define ID_BTNO04 8104 #define ID_BTNO05 8105 #define ID_BTNO06 8106 #define ID_BTNO07 8107 #define ID_BTNO08 8108 #define ID_BTNO09 8109 #define ID_BTNO10 8110 #define ID_BTNO11 8111 // For Parameters Window #define ID_BTNP00 8200 #define ID_BTNP01 8201 #define ID_BTNP02 8202 #define ID_BTNP03 8203 #define ID_BTNP04 8204 #define ID_BTNP05 8205 #define ID_BTNP06 8206 #define ID_BTNP07 8207 #define ID_BTNP08 8208 #define ID_BTNP09 8209 #define ID_BTNP10 8210 #define ID_BTNP11 8211 // --------------------------- Define GET #define GET_ONE 7001 #define GET_TWO 7002 #define GET_THREE 7003 #define GET_FOUR 7004 #define GET_FIVE 7005 #define GET_SIX 7006 #define GET_SEVEN 7007 #define GET_EIGHT 7008 #define GET_NINE 7009 // Variables for Preload Images STATIC hDesigner STATIC hKit STATIC hCadreH STATIC hCadreM STATIC hCadreL STATIC hRedBtn STATIC hRedBar STATIC hMetalBtn ******************************************************************************** // Main Program ******************************************************************************** FUNCTION MAIN() LOCAL hWndMain LOCAL hWndTools LOCAL hWndObjects LOCAL hWndParam LOCAL cWinTitle := "Designer for NTKxHabour and more..." LOCAL hIcon := NTK_LoadIcon( NTK_GetInstance() , "rICO01" ) LOCAL aArray := CenterWindow(640,480) LOCAL cBmpFile, hGetBkClrBrush, hGetFocusClrBrush // Local var for messages capture LOCAL NTK_aMSG := { 0,0,0,0,0,0,0 } // Local var used by the read system LOCAL lGetUpdated, lOldReadState, lOldGetMode // Preload Images hDesigner := NTK_ReadPictureToBmp( ".\Images\Designer.jpg" ) hKit := NTK_ReadPictureToBmp( ".\Images\NewTechnologyKit.jpg" ) hCadreH := NTK_ReadPictureToBmp( ".\Images\CadreH.jpg" ) hCadreM := NTK_ReadPictureToBmp( ".\Images\CadreM.jpg" ) hCadreL := NTK_ReadPictureToBmp( ".\Images\CadreL.jpg" ) hRedBtn := NTK_ReadPictureToBmp( ".\Images\RedButton.jpg" ) hRedBar := NTK_ReadPictureToBmp( ".\Images\RedBar.jpg" ) hMetalBtn := NTK_ReadPictureToBmp( ".\Images\MetalButton.jpg" ) // State variables PRIVATE StatTools := 1 PRIVATE PageCreate := {"BASE","OBJECT","DRAW"} PRIVATE PageTools := 1 // Local Messages PRIVATE HlpMsg := {} // This array will contain Button list and Get list PRIVATE aBtnList := {} // Must be Here. We certainly need Buttons... PRIVATE aGetList := {} // Must be Here. We certainly need Gets... // If we set delete ON, the database (cXBaseFile) will not keep deleted records // and if we set delete OFF,the deleted records will be flaged and will not be deleted until a PACK or ZAP command SET DELETE ON // Fonts PRIVATE aObjFONT1 := { -10,0,0,0,0, .F., .F., .F., 1, 0, 0, 0, 0, "ARIAL" } PRIVATE hObjFONT1 := NTK_CreateFont( aObjFONT1 ) IF hObjFONT1 == 0 NTK_MsgBox( , "Can not create Arial Font..." ) RETURN Nil ENDIF PRIVATE aObjFONT2 := { -14,6,0,0,700, .F., .F., .F., 1, 0, 0, 0, 0, "VERDANA" } PRIVATE hObjFONT2 := NTK_CreateFont( aObjFONT2 ) IF hObjFONT2 == 0 NTK_MsgBox( , "Can not create Verdana Font..." ) RETURN Nil ENDIF PRIVATE aObjFONT3 := { -14,0,0,0,0, .F., .F., .F., 1, 0, 0, 0, 0, "WINGDINGS" } PRIVATE hObjFONT3 := NTK_CreateFont( aObjFONT3 ) IF hObjFONT3 == 0 NTK_MsgBox( , "Can not create Wingdings Font..." ) RETURN Nil ENDIF CREATE SOLID BRUSH NTK_RGB(0,0,0) TO hBkClrBrush // ----- Ensure that the common control dynamic-link library (DLL) is loaded. // ----- Don't forget to use this command if U plan to use controls such as DatePicker, tooltips... NTK_InitCommonControlsEx( ICC_DATE_CLASSES + ICC_BAR_CLASSES + ICC_STANDARD_CLASSES + ICC_WIN95_CLASSES ); // Create Main Window CREATE WINDOW hWndMain ; TITLE cWinTitle ; ICON hIcon ; AT 0,0 SIZE aArray[3],aArray[4] ; BRUSH hBkClrBrush ; STYLE WS_POPUP ; ON PAINT DoRePaint() ; ON EXIT DoExit() IF EMPTY( hWndMain ) NTK_MsgBox( , "Je ne peux pas créer la fenêtre principale" ) RETURN Nil ENDIF ACTIVATE WINDOW hWndMain NORMAL // Display window and its controls // Create Tools Window CREATE WINDOW hWndTools ; TITLE "Outils" ; AT 20,0 SIZE 201,aArray[4] ; INTO WINDOW hWndMain ; STYLE WS_POPUP ; ON PAINT DoRePaintTools() ; ON EXIT DoExit() IF EMPTY( hWndTools ) NTK_MsgBox( , "Je ne peux pas créer la fenêtre des outils" ) RETURN Nil ENDIF // Button : MINIMALIZE/MAXIMALIZE @ 4,173 BUTTON "" SIZE 13,24 ; ID ID_BTNT00 ; TYPE NTK_BT_OD_FREESHAPE ; SUPER ACCEL KEY K_ALT_F2 ; ACTION ChangeTools(hWndTools,10) ; STATE NTK_BT_ENABLE ; FONT NTK_GetStockObject(SYSTEM_FONT) ; STYLE BS_CENTER ; BITMAP UP "ZOOM" ; BITMAP DN "ICONIZE" ; MESSAGE "Maximalize or minimalize window" ; OF hWndTools // Button : POSITION UP/DOWN @ 19,173 BUTTON "" SIZE 13,24 ; ID ID_BTNT01 ; TYPE NTK_BT_OD_FREESHAPE ; SUPER ACCEL KEY K_ALT_F3 ; ACTION ChangeTools(hWndTools,1) ; STATE NTK_BT_ENABLE ; FONT NTK_GetStockObject(SYSTEM_FONT) ; STYLE BS_CENTER ; BITMAP UP "HIGH" ; BITMAP DN "LOW" ; MESSAGE "Change window position" ; OF hWndTools PRIVATE Width, BtnHeight, xSpace, ySpace, xStart, yStart PRIVATE yLine, NbrBtn, xBtn, yBtn, xBtnSize Width := 191 xSpace := 4 ySpace := 2 BtnHeight := 25 xStart := 5 yStart := 54 yLine := 1 //------------------------------------------ Tools File // 2 buttons per line NbrBtn := 2 xBtnSize := round( (Width-((NbrBtn+1)*xSpace)) / NbrBtn, 0 ) xBtn := xStart + xSpace yBtn := yStart + ySpace // Button : NEW @ yBtn,xBtn BUTTON "NEW" SIZE BtnHeight,xBtnSize ; ID ID_BTNT02 ; TYPE NTK_BT_OD_FREESHAPE ; SUPER ACCEL KEY K_ALT_N ; ACTION HelloEvent1(hWndTools) ; STATE NTK_BT_ENABLE ; FONT hObjFONT2 ; STYLE BS_CENTER ; TEXTCOLOR NTK_RGB(255,255,255) ; BITMAP UP "BTNSTD" ; BITMAP DN "BTNSTD_OVR" ; BITMAP OVER "BTNSTD_OVR" ; MESSAGE "Create a new NTK project..." ; OF hWndTools // Button : LOAD xBtn := xBtn + xBtnSize + xSpace @ yBtn,xBtn BUTTON "LOAD..." SIZE BtnHeight,xBtnSize ; ID ID_BTNT03 ; TYPE NTK_BT_OD_FREESHAPE ; SUPER ACCEL KEY K_ALT_L ; ACTION HelloEvent1(hWndTools) ; STATE NTK_BT_ENABLE ; FONT hObjFONT2 ; STYLE BS_CENTER ; TEXTCOLOR NTK_RGB(255,255,255) ; BITMAP UP "BTNSTD" ; BITMAP DN "BTNSTD_OVR" ; BITMAP OVER "BTNSTD_OVR" ; MESSAGE "Load a NTK project or a NTK Theme..." ; OF hWndTools // Button : SAVE xBtn := xStart + xSpace yBtn := yBtn + BtnHeight + ySpace @ yBtn,xBtn BUTTON "SAVE" SIZE BtnHeight,xBtnSize ; ID ID_BTNT04 ; TYPE NTK_BT_OD_FREESHAPE ; SUPER ACCEL KEY K_CTRL_S ; ACTION HelloEvent1(hWndTools) ; STATE NTK_BT_ENABLE ; FONT hObjFONT2 ; STYLE BS_CENTER ; TEXTCOLOR NTK_RGB(255,255,255) ; BITMAP UP "BTNSTD" ; BITMAP DN "BTNSTD_OVR" ; BITMAP OVER "BTNSTD_OVR" ; MESSAGE "Save actif NTK project" ; OF hWndTools // Button : SAVE AS xBtn := xBtn + xBtnSize + xSpace @ yBtn,xBtn BUTTON "SAVE AS..." SIZE BtnHeight,xBtnSize ; ID ID_BTNT05 ; TYPE NTK_BT_OD_FREESHAPE ; SUPER ACCEL KEY K_ALT_S ; ACTION HelloEvent1(hWndTools) ; STATE NTK_BT_ENABLE ; FONT hObjFONT2 ; STYLE BS_CENTER ; TEXTCOLOR NTK_RGB(255,255,255) ; BITMAP UP "BTNSTD" ; BITMAP DN "BTNSTD_OVR" ; BITMAP OVER "BTNSTD_OVR" ; MESSAGE "Save actif NTK project as ... " ; OF hWndTools // String : FILENAME // Button : GENERATE // Only one button per line xBtn := xStart + xSpace yBtn := yBtn + BtnHeight * 2 + ySpace + 15 xBtnSize := Width - (xSpace*2) @ yBtn,xBtn BUTTON "GENERATE" SIZE BtnHeight,xBtnSize ; ID ID_BTNT06 ; TYPE NTK_BT_OD_FREESHAPE ; SUPER ACCEL KEY K_ALT_G ; ACTION HelloEvent1(hWndTools) ; STATE NTK_BT_ENABLE ; FONT hObjFONT2 ; STYLE BS_CENTER ; TEXTCOLOR NTK_RGB(255,255,255) ; BITMAP UP "BTNSTD" ; BITMAP DN "BTNSTD_OVR" ; BITMAP OVER "BTNSTD_OVR" ; MESSAGE "Generate NTK source code of actif NTK project..." ; OF hWndTools //--------------------------------------- Tools Objects // 2 buttons per line NbrBtn := 2 xBtnSize := round( (Width-((NbrBtn+1)*xSpace)) / NbrBtn, 0 ) xBtn := xStart + xSpace yBtn := yBtn + 53 + ySpace // Button : LIST @ yBtn,xBtn BUTTON "LIST" SIZE BtnHeight,xBtnSize ; ID ID_BTNT07 ; TYPE NTK_BT_OD_FREESHAPE ; SUPER ACCEL KEY K_ALT_O ; ACTION OpenCloseWindow(hWndObjects) ; STATE NTK_BT_ENABLE ; FONT hObjFONT2 ; STYLE BS_CENTER ; TEXTCOLOR NTK_RGB(255,255,255) ; BITMAP UP "BTNSTD" ; BITMAP DN "BTNSTD_OVR" ; BITMAP OVER "BTNSTD_OVR" ; MESSAGE "List objects of actif NTK project"; OF hWndTools // Button : PROPERTIES xBtn := xBtn + xBtnSize + xSpace @ yBtn,xBtn BUTTON "PROPERTIES" SIZE BtnHeight,xBtnSize ; ID ID_BTNT08 ; TYPE NTK_BT_OD_FREESHAPE ; SUPER ACCEL KEY K_ALT_P ; ACTION OpenCloseWindow(hWndParam) ; STATE NTK_BT_ENABLE ; FONT hObjFONT2 ; STYLE BS_CENTER ; TEXTCOLOR NTK_RGB(255,255,255) ; BITMAP UP "BTNSTD" ; BITMAP DN "BTNSTD_OVR" ; BITMAP OVER "BTNSTD_OVR" ; MESSAGE "Properties of actif object" ; OF hWndTools // Button : DUPLICATE xBtn := xStart + xSpace yBtn := yBtn + BtnHeight + ySpace @ yBtn,xBtn BUTTON "DUPLICATE" SIZE BtnHeight,xBtnSize ; ID ID_BTNT09 ; TYPE NTK_BT_OD_FREESHAPE ; SUPER ACCEL KEY K_ALT_D ; ACTION HelloEvent1(hWndTools) ; STATE NTK_BT_ENABLE ; FONT hObjFONT2 ; STYLE BS_CENTER ; TEXTCOLOR NTK_RGB(255,255,255) ; BITMAP UP "BTNSTD" ; BITMAP DN "BTNSTD_OVR" ; BITMAP OVER "BTNSTD_OVR" ; MESSAGE "Duplicate a object" ; OF hWndTools // Button : DELETE xBtn := xBtn + xBtnSize + xSpace @ yBtn,xBtn BUTTON "DELETE" SIZE BtnHeight,xBtnSize ; ID ID_BTNT10 ; TYPE NTK_BT_OD_FREESHAPE ; SUPER ACCEL KEY K_ALT_D ; ACTION HelloEvent1(hWndTools) ; STATE NTK_BT_ENABLE ; FONT hObjFONT2 ; STYLE BS_CENTER ; TEXTCOLOR NTK_RGB(255,255,255) ; BITMAP UP "BTNSTD" ; BITMAP DN "BTNSTD_OVR" ; BITMAP OVER "BTNSTD_OVR" ; MESSAGE "Delete a object" ; OF hWndTools // Button : ALIGN WINDOW xBtn := xStart + xSpace yBtn := yBtn + BtnHeight + ySpace xBtnSize := 65 @ yBtn,xBtn BUTTON "ALIGN..." SIZE BtnHeight,xBtnSize ; ID ID_BTNT11 ; TYPE NTK_BT_OD_FREESHAPE ; SUPER ACCEL KEY K_ALT_A ; ACTION HelloEvent1(hWndTools) ; STATE NTK_BT_ENABLE ; FONT hObjFONT2 ; STYLE BS_CENTER ; TEXTCOLOR NTK_RGB(255,255,255) ; BITMAP UP "BTNSTD" ; BITMAP DN "BTNSTD_OVR" ; BITMAP OVER "BTNSTD_OVR" ; MESSAGE "Align selected objects between them" ; OF hWndTools // 5 buttons in the rest NbrBtn := 5 xBtn := xBtn + xBtnSize + xSpace xBtnSize := Width-xBtn xBtnSize := round( (xBtnSize-((NbrBtn)*2)) / NbrBtn, 0 ) // Button : QUICK LEFT ALIGN @ yBtn,xBtn BUTTON "Û" SIZE BtnHeight,xBtnSize ; ID ID_BTNT12 ; TYPE NTK_BT_OD_FREESHAPE ; SUPER ACCEL KEY K_CTRL_G ; ACTION HelloEvent1(hWndTools) ; STATE NTK_BT_ENABLE ; FONT hObjFONT3 ; STYLE BS_CENTER ; TEXTCOLOR NTK_RGB(255,255,255) ; BITMAP UP "BTNSTD" ; BITMAP DN "BTNSTD_OVR" ; BITMAP OVER "BTNSTD_OVR" ; MESSAGE "Left align of selected objects" ; OF hWndTools // Button : QUICK UP ALIGN xBtn := xBtn + xBtnSize + 2 @ yBtn,xBtn BUTTON "Ý" SIZE BtnHeight,xBtnSize ; ID ID_BTNT13 ; TYPE NTK_BT_OD_FREESHAPE ; SUPER ACCEL KEY K_CTRL_U ; ACTION HelloEvent1(hWndTools) ; STATE NTK_BT_ENABLE ; FONT hObjFONT3 ; STYLE BS_CENTER ; TEXTCOLOR NTK_RGB(255,255,255) ; BITMAP UP "BTNSTD" ; BITMAP DN "BTNSTD_OVR" ; BITMAP OVER "BTNSTD_OVR" ; MESSAGE "Up align of selected objects" ; OF hWndTools // Button : QUICK CENTER ALIGN xBtn := xBtn + xBtnSize + 2 @ yBtn,xBtn BUTTON "¤" SIZE BtnHeight,xBtnSize ; ID ID_BTNT14 ; TYPE NTK_BT_OD_FREESHAPE ; SUPER ACCEL KEY K_CTRL_C ; ACTION HelloEvent1(hWndTools) ; STATE NTK_BT_ENABLE ; FONT hObjFONT3 ; STYLE BS_CENTER ; TEXTCOLOR NTK_RGB(255,255,255) ; BITMAP UP "BTNSTD" ; BITMAP DN "BTNSTD_OVR" ; BITMAP OVER "BTNSTD_OVR" ; MESSAGE "Center align of selected objects" ; OF hWndTools // Button : QUICK DOWN ALIGN xBtn := xBtn + xBtnSize + 2 @ yBtn,xBtn BUTTON "Þ" SIZE BtnHeight,xBtnSize ; ID ID_BTNT15 ; TYPE NTK_BT_OD_FREESHAPE ; SUPER ACCEL KEY K_CTRL_D ; ACTION HelloEvent1(hWndTools) ; STATE NTK_BT_ENABLE ; FONT hObjFONT3 ; STYLE BS_CENTER ; TEXTCOLOR NTK_RGB(255,255,255) ; BITMAP UP "BTNSTD" ; BITMAP DN "BTNSTD_OVR" ; BITMAP OVER "BTNSTD_OVR" ; MESSAGE "Down align of selected objects" ; OF hWndTools // Button : QUICK RIGHT ALIGN xBtn := xBtn + xBtnSize + 2 @ yBtn,xBtn BUTTON "Ü" SIZE BtnHeight,(Width-xBtn+2) ; ID ID_BTNT16 ; TYPE NTK_BT_OD_FREESHAPE ; SUPER ACCEL KEY K_CTRL_G ; ACTION HelloEvent1(hWndTools) ; STATE NTK_BT_ENABLE ; FONT hObjFONT3 ; STYLE BS_CENTER ; TEXTCOLOR NTK_RGB(255,255,255) ; BITMAP UP "BTNSTD" ; BITMAP DN "BTNSTD_OVR" ; BITMAP OVER "BTNSTD_OVR" ; MESSAGE "Right align of selected objects" ; OF hWndTools // 5 buttons per line NbrBtn := 5 xBtnSize := round( (Width-((NbrBtn+1)*xSpace)) / NbrBtn, 0 ) xBtn := xStart + xSpace yBtn := yBtn + BtnHeight + ySpace // Button : FRONT POSITION @ yBtn,xBtn BUTTON "é" SIZE BtnHeight,xBtnSize ; ID ID_BTNT17 ; TYPE NTK_BT_OD_FREESHAPE ; SUPER ACCEL KEY K_CTRL_G ; ACTION HelloEvent1(hWndTools) ; STATE NTK_BT_ENABLE ; FONT hObjFONT3 ; STYLE BS_CENTER ; TEXTCOLOR NTK_RGB(255,255,255) ; BITMAP UP "BTNSTD" ; BITMAP DN "BTNSTD_OVR" ; BITMAP OVER "BTNSTD_OVR" ; MESSAGE "Bring at the first front position selected objects" ; OF hWndTools // Button : PREVIOUS POSITION xBtn := xBtn + xBtnSize + xSpace @ yBtn,xBtn BUTTON "á" SIZE BtnHeight,xBtnSize ; ID ID_BTNT18 ; TYPE NTK_BT_OD_FREESHAPE ; SUPER ACCEL KEY K_CTRL_U ; ACTION HelloEvent1(hWndTools) ; STATE NTK_BT_ENABLE ; FONT hObjFONT3 ; STYLE BS_CENTER ; TEXTCOLOR NTK_RGB(255,255,255) ; BITMAP UP "BTNSTD" ; BITMAP DN "BTNSTD_OVR" ; BITMAP OVER "BTNSTD_OVR" ; MESSAGE "Bring at the previous front position selected objects" ; OF hWndTools // Button : NEXT POSITION xBtn := xBtn + xBtnSize + xSpace @ yBtn,xBtn BUTTON "â" SIZE BtnHeight,xBtnSize ; ID ID_BTNT19 ; TYPE NTK_BT_OD_FREESHAPE ; SUPER ACCEL KEY K_CTRL_C ; ACTION HelloEvent1(hWndTools) ; STATE NTK_BT_ENABLE ; FONT hObjFONT3 ; STYLE BS_CENTER ; TEXTCOLOR NTK_RGB(255,255,255) ; BITMAP UP "BTNSTD" ; BITMAP DN "BTNSTD_OVR" ; BITMAP OVER "BTNSTD_OVR" ; MESSAGE "Bring at the next back position selected objects" ; OF hWndTools // Button : BACK POSITION xBtn := xBtn + xBtnSize + xSpace @ yBtn,xBtn BUTTON "ê" SIZE BtnHeight,xBtnSize ; ID ID_BTNT20 ; TYPE NTK_BT_OD_FREESHAPE ; SUPER ACCEL KEY K_CTRL_D ; ACTION HelloEvent1(hWndTools) ; STATE NTK_BT_ENABLE ; FONT hObjFONT3 ; STYLE BS_CENTER ; TEXTCOLOR NTK_RGB(255,255,255) ; BITMAP UP "BTNSTD" ; BITMAP DN "BTNSTD_OVR" ; BITMAP OVER "BTNSTD_OVR" ; MESSAGE "Bring at the last back position selected objects" ; OF hWndTools // Button : LOCK xBtn := xBtn + xBtnSize + xSpace @ yBtn,xBtn BUTTON "N" SIZE BtnHeight,(Width-xBtn+2) ; ID ID_BTNT21 ; TYPE NTK_BT_OD_FREESHAPE ; SUPER ACCEL KEY K_CTRL_G ; ACTION HelloEvent1(hWndTools) ; STATE NTK_BT_ENABLE ; FONT hObjFONT3 ; STYLE BS_CENTER ; TEXTCOLOR NTK_RGB(255,255,255) ; BITMAP UP "BTNSTD" ; BITMAP DN "BTNSTD_OVR" ; BITMAP OVER "BTNSTD_OVR" ; MESSAGE "Lock postion of selected objects" ; OF hWndTools //---------------------------------------- Create Tools // Actif Page // Button : SWITCH PAGE OF LIST CREATED OBJECTS yBtn := yBtn + 34 xBtn := 169 @ yBtn,xBtn BUTTON "" SIZE 31,30 ; ID ID_BTNT22 ; TYPE NTK_BT_OD_FREESHAPE ; SUPER ACCEL KEY K_CTRL_PGDN ; ACTION SwitchPage(hWndTools) ; STATE NTK_BT_ENABLE ; FONT hObjFONT3 ; STYLE BS_CENTER ; TEXTCOLOR NTK_RGB(255,255,255) ; BITMAP UP "SWITCH" ; BITMAP DN "SWITCH_OVR" ; BITMAP OVER "SWITCH_OVR" ; MESSAGE "Switch to the next list of created objects" ; OF hWndTools // List of possible create objects yBtn := yBtn + 42 xBtn := xStart + xSpace xBtnSize := Width - ( 2 * xSpace) BtnHeight := 25 // Window : BASE CREATE WINDOW hWndBase ; TITLE "Base" ; AT 20+xBtn,yBtn SIZE xBtnSize,3*BtnHeight ; INTO WINDOW hWndTools ; STYLE WS_POPUP ; ON EXIT DoExit() IF EMPTY( hWndBase ) NTK_MsgBox( , "Je ne peux pas créer la fenêtre des outils" ) RETURN Nil ENDIF // Button : WINDOW @ (BtnHeight*0),0 BUTTON "WINDOW" SIZE BtnHeight,xBtnSize ; ID ID_BTNT23 ; TYPE NTK_BT_OD_FREESHAPE ; ACTION HelloEvent1(hWndTools) ; STATE NTK_BT_ENABLE ; FONT hObjFONT2 ; STYLE BS_CENTER ; TEXTCOLOR NTK_RGB(255,255,255) ; BITMAP UP "BTNGREY" ; BITMAP DN "BTNGREY_OVR" ; BITMAP OVER "BTNGREY_OVR" ; MESSAGE "Create a new window" ; OF hWndBase // Button : MENU @ (BtnHeight*1),0 BUTTON "MENU" SIZE BtnHeight,xBtnSize ; ID ID_BTNT24 ; TYPE NTK_BT_OD_FREESHAPE ; ACTION HelloEvent1(hWndTools) ; STATE NTK_BT_ENABLE ; FONT hObjFONT2 ; STYLE BS_CENTER ; TEXTCOLOR NTK_RGB(255,255,255) ; BITMAP UP "BTNGREY" ; BITMAP DN "BTNGREY_OVR" ; BITMAP OVER "BTNGREY_OVR" ; MESSAGE "Create a new menu" ; OF hWndBase // Button : GROUP @ (BtnHeight*2),0 BUTTON "GROUP" SIZE BtnHeight,xBtnSize ; ID ID_BTNT25 ; TYPE NTK_BT_OD_FREESHAPE ; ACTION HelloEvent1(hWndTools) ; STATE NTK_BT_ENABLE ; FONT hObjFONT2 ; STYLE BS_CENTER ; TEXTCOLOR NTK_RGB(255,255,255) ; BITMAP UP "BTNGREY" ; BITMAP DN "BTNGREY_OVR" ; BITMAP OVER "BTNGREY_OVR" ; MESSAGE "Create a new group objects" ; OF hWndBase // Window : DRAW CREATE WINDOW hWndDraw ; TITLE "Draw" ; AT 20+xBtn,yBtn SIZE xBtnSize,4*BtnHeight ; INTO WINDOW hWndTools ; STYLE WS_POPUP ; ON EXIT DoExit() IF EMPTY( hWndDraw ) NTK_MsgBox( , "Je ne peux pas créer la fenêtre des outils" ) RETURN Nil ENDIF // Button : IMAGE @ (BtnHeight*0),0 BUTTON "IMAGE" SIZE BtnHeight,xBtnSize ; ID ID_BTNT26 ; TYPE NTK_BT_OD_FREESHAPE ; ACTION HelloEvent1(hWndTools) ; STATE NTK_BT_ENABLE ; FONT hObjFONT2 ; STYLE BS_CENTER ; TEXTCOLOR NTK_RGB(255,255,255) ; BITMAP UP "BTNGREY" ; BITMAP DN "BTNGREY_OVR" ; BITMAP OVER "BTNGREY_OVR" ; MESSAGE "Create a new window" ; OF hWndDraw // Button : TEXT @ (BtnHeight*1),0 BUTTON "TEXT" SIZE BtnHeight,xBtnSize ; ID ID_BTNT27 ; TYPE NTK_BT_OD_FREESHAPE ; ACTION HelloEvent1(hWndTools) ; STATE NTK_BT_ENABLE ; FONT hObjFONT2 ; STYLE BS_CENTER ; TEXTCOLOR NTK_RGB(255,255,255) ; BITMAP UP "BTNGREY" ; BITMAP DN "BTNGREY_OVR" ; BITMAP OVER "BTNGREY_OVR" ; MESSAGE "Create a new menu" ; OF hWndDraw // Button : BOX @ (BtnHeight*2),0 BUTTON "BOX" SIZE BtnHeight,xBtnSize ; ID ID_BTNT28 ; TYPE NTK_BT_OD_FREESHAPE ; ACTION HelloEvent1(hWndTools) ; STATE NTK_BT_ENABLE ; FONT hObjFONT2 ; STYLE BS_CENTER ; TEXTCOLOR NTK_RGB(255,255,255) ; BITMAP UP "BTNGREY" ; BITMAP DN "BTNGREY_OVR" ; BITMAP OVER "BTNGREY_OVR" ; MESSAGE "Create a new group objects" ; OF hWndDraw // Button : CIRCLE @ (BtnHeight*3),0 BUTTON "CIRCLE" SIZE BtnHeight,xBtnSize ; ID ID_BTNT29 ; TYPE NTK_BT_OD_FREESHAPE ; ACTION HelloEvent1(hWndTools) ; STATE NTK_BT_ENABLE ; FONT hObjFONT2 ; STYLE BS_CENTER ; TEXTCOLOR NTK_RGB(255,255,255) ; BITMAP UP "BTNGREY" ; BITMAP DN "BTNGREY_OVR" ; BITMAP OVER "BTNGREY_OVR" ; MESSAGE "Create a new group objects" ; OF hWndDraw ACTIVATE WINDOW hWndTools NORMAL // Display window and its controls ACTIVATE WINDOW hWndBase NORMAL // Display window and its controls ACTIVATE WINDOW hWndDraw NORMAL // Display window and its controls // Create Objects Window CREATE WINDOW hWndObjects ; TITLE "Objets" ; AT 241,20 SIZE 201,400 ; INTO WINDOW hWndMain ; STYLE WS_POPUP ; ON PAINT DoRePaintObjects() ; ON EXIT DoExit() @ 6,139 BUTTON "" SIZE 18,22 ; ID ID_BTNO00 ; TYPE NTK_BT_OD_FREESHAPE ; SUPER ACCEL KEY K_ALT_F5 ; STATE NTK_BT_ENABLE ; FONT NTK_GetStockObject(SYSTEM_FONT) ; STYLE BS_CENTER ; BITMAP UP "HIGHRED" ; BITMAP DN "LOWRED" ; MESSAGE "Changer orientation des fenêtres" ; OF hWndObjects @ 6,160 BUTTON "" SIZE 18,21 ; ID ID_BTNO01 ; TYPE NTK_BT_OD_FREESHAPE ; SUPER ACCEL KEY K_ALT_F6 ; STATE NTK_BT_ENABLE ; FONT NTK_GetStockObject(SYSTEM_FONT) ; STYLE BS_CENTER ; BITMAP UP "ZOOMRED" ; BITMAP DN "ICONIZERED" ; MESSAGE "Iconifier la fenêtre" ; OF hWndObjects @ 6,180 BUTTON "" SIZE 18,19 ; ID ID_BTNO02 ; TYPE NTK_BT_OD_FREESHAPE ; SUPER ACCEL KEY K_ALT_F7 ; ACTION NTK_ShowWindow(hWndObjects,.F.) ; STATE NTK_BT_ENABLE ; FONT NTK_GetStockObject(SYSTEM_FONT) ; STYLE BS_CENTER ; BITMAP UP "CLOSE" ; BITMAP OVER "CLOSE_OVR" ; MESSAGE "Fermer la fenêtre" ; OF hWndObjects IF EMPTY( hWndObjects ) NTK_MsgBox( , "Je ne peux pas créer la fenêtre des objets" ) RETURN Nil ENDIF ACTIVATE WINDOW hWndObjects NORMAL // Display window and its controls // Create Properties Window CREATE WINDOW hWndParam ; TITLE "Propriétés" ; AT 462,20 SIZE 201,300 ; INTO WINDOW hWndMain ; STYLE WS_POPUP ; ON PAINT DoRePaintParam() ; ON EXIT DoExit() @ 6,139 BUTTON "" SIZE 18,22 ; ID ID_BTNP00 ; TYPE NTK_BT_OD_FREESHAPE ; SUPER ACCEL KEY K_ALT_F5 ; STATE NTK_BT_ENABLE ; FONT NTK_GetStockObject(SYSTEM_FONT) ; STYLE BS_CENTER ; BITMAP UP "HIGHRED" ; BITMAP DN "LOWRED" ; MESSAGE "Changer orientation des fenêtres" ; OF hWndParam @ 6,160 BUTTON "" SIZE 18,21 ; ID ID_BTNP01 ; TYPE NTK_BT_OD_FREESHAPE ; SUPER ACCEL KEY K_ALT_F6 ; STATE NTK_BT_ENABLE ; FONT NTK_GetStockObject(SYSTEM_FONT) ; STYLE BS_CENTER ; BITMAP UP "ZOOMRED" ; BITMAP DN "ICONIZERED" ; MESSAGE "Iconifier la fenêtre" ; OF hWndParam @ 6,180 BUTTON "" SIZE 18,19 ; ID ID_BTNP02 ; TYPE NTK_BT_OD_FREESHAPE ; SUPER ACCEL KEY K_ALT_F7 ; ACTION NTK_ShowWindow(hWndParam,.F.) ; STATE NTK_BT_ENABLE ; FONT NTK_GetStockObject(SYSTEM_FONT) ; STYLE BS_CENTER ; BITMAP UP "CLOSE" ; BITMAP OVER "CLOSE_OVR" ; MESSAGE "Fermer la fenêtre" ; OF hWndParam IF EMPTY( hWndParam ) NTK_MsgBox( , "Je ne peux pas créer la fenêtre des propriétés" ) RETURN Nil ENDIF ACTIVATE WINDOW hWndParam NORMAL // Display window and its controls SET DATE USA SET CENTURY ON SET PIXEL MODE ON // default is always ON SET DEFAULT SAY FONT TO NTK_GetStockObject(ANSI_FIXED_FONT) // here we go... AUTO HANDLE EVENTS OF WINDOW hWndMain USING ; // Start background processing BUTTON LIST aBtnList // Do not forget to release unused objects before exiting the program ! NTK_DeleteObject(cBmpFile) DELETE FONT hObjfont1 DELETE BRUSH hBkClrBrush DELETE BRUSH hGetBkClrBrush DELETE BRUSH hGetFocusClrBrush CLOSE WINDOW hWndMain CLOSE WINDOW hWndParam RETURN // End running NTK RAD application. ******************************************************************************** // Exit Program ******************************************************************************** FUNCTION DoExit(hWnd, message, nwParam, nlParam) // This proc. is automatically called each time our window receives a Destroy Msg or // when NTK_SendCloseEvent() is invoked... IF NTK_MsgBox( hWnd, "Do you really want to quit ?", "", MB_OKCANCEL ) == IDOK RETURN( NTK_SendQuitEvent() ) ENDIF RETURN(.F.) // Do not quit, keep on current task ******************************************************************************** // Open or Close a windows ******************************************************************************** FUNCTION OpenCloseWindow(hWnd) IF NTK_IsWindowVisible(hWnd) NTK_ShowWindow(hWnd,.F.) ELSE NTK_ShowWindow(hWnd,.T.) ENDIF RETURN(0) ******************************************************************************** // Get Mouse Messages ******************************************************************************** FUNCTION DoMsgMouse(hWnd, message, nwParam, nlParam,hDC) RETURN(.F.) ******************************************************************************** // Repaint Main Window ******************************************************************************** FUNCTION DOREPAINT(hWnd, message, nwParam, nlParam, hDC) LOCAL aCenter := CenterWindow(298,165) LOCAL ColorX nbrX := round(aCenter[3]/20,0) midX := round(nbrX/2,0)-1 FOR nX := 0 TO nbrX nbrY := round(aCenter[4]/20,0) FOR nY := 0 TO nbrY IF nY = nbrY-1 ColorX := NTK_RGB(150,0,0) ELSE ColorX := NTK_RGB(100-nY*2,100-nY*2,100-nY*2) ENDIF @ 5+nY*20,5+nX*20 SAY "."; INTO CONTEXT hDC ; FONT NTK_GetStockObject(SYSTEM_FONT) ; TEXTCOLOR ColorX ; BACKCOLOR TRANSPARENT NEXT NEXT @ aCenter[4]-28, aCenter[3]-200 SAY "© 2006 - Markus II / NTK Team / SIS-log"; INTO CONTEXT hDC ; TEXTCOLOR NTK_RGB(150,0,0) ; FONT hObjFONT1 ; BACKCOLOR TRANSPARENT ; STYLE DT_LEFT RETURN(0) ******************************************************************************** // Initialize Tools Window's Objects ******************************************************************************** FUNCTION CREATETOOLS(hWnd, message, nwParam, nlParam) RETURN(0) ******************************************************************************** // change Tools Window ******************************************************************************** FUNCTION CHANGETOOLS(hWnd,State) IF (State == 10) IF StatTools > 10 StatTools := StatTools-State ELSE StatTools := StatTools+State ENDIF State := 0 ENDIF IF (StatTools == 1) .OR. (StatTools == 11) StatTools := StatTools+State ELSE StatTools := StatTools-State ENDIF NTK_RedrawWindow( hWnd,; NULL,; NULL,; RDW_ERASE + RDW_INVALIDATE + RDW_FRAME ) RETURN(0) ******************************************************************************** // Switch to the Next Page Objects ******************************************************************************** FUNCTION SWITCHPAGE(hWnd) IF PageTools < 3 PageTools := PageTools + 1 ELSE PageTools := 1 ENDIF NTK_RedrawWindow( hWnd,; NULL,; NULL,; RDW_ERASE + RDW_INVALIDATE + RDW_FRAME ) RETURN(0) ******************************************************************************** // Repaint Tools Window ******************************************************************************** FUNCTION DOREPAINTTOOLS(hWnd, message, nwParam, nlParam, hDC) LOCAL hBG LOCAL yPos := 0 LOCAL aImg := { 0, 0, 201, 161} LOCAL aArray := CenterWindow(640,480) LOCAL aPos := {0,36,9,20,100,20,10,20,85,20,31,20,aArray[4]-(36+9+20+100+20+10+20+85+20+31)-40,20} yPos := aPos[1] DO CASE CASE StatTools = 12 NTK_MoveWindow( hWnd, 20, 0, 201, 45, .T. ) CASE (StatTools = 1) .OR. (StatTools = 2) NTK_MoveWindow( hWnd, 20, 0, 201, aArray[4], .T. ) CASE StatTools = 11 NTK_MoveWindow( hWnd, 20, aArray[4]-45, 201, 45, .T. ) ENDCASE NTK_DrawBmp( hDC, hDesigner, 0, yPos, SRCCOPY ) yPos := yPos + aPos[2] NTK_DrawBmp( hDC, hKit, 0, yPos, SRCCOPY ) IF StatTools < 3 yPos := yPos + aPos[3] NTK_DrawBmp( hDC, hCadreH, 0, yPos, SRCCOPY ) yPos := yPos + aPos[4] hBG := StretchedBmp( hDC, hCadreM, aImg, 201, aPos[5] ) NTK_DrawBmp( hDC, hBG, 0, yPos, SRCCOPY ) yPos := yPos + aPos[5] NTK_DrawBmp( hDC, hCadreL, 0, yPos, SRCCOPY ) yPos := yPos + aPos[6] NTK_DrawBmp( hDC, hRedBar, 0, yPos, SRCCOPY ) yPos := yPos + aPos[7] NTK_DrawBmp( hDC, hCadreH, 0, yPos, SRCCOPY ) yPos := yPos + aPos[8] hBG := StretchedBmp( hDC, hCadreM, aImg, 201, aPos[9] ) NTK_DrawBmp( hDC, hBG, 0, yPos, SRCCOPY ) yPos := yPos + aPos[9] NTK_DrawBmp( hDC, hCadreL, 0, yPos, SRCCOPY ) yPos := yPos + aPos[10] NTK_DrawBmp( hDC, hMetalBtn, 0, yPos, SRCCOPY ) yPos := yPos + aPos[11] NTK_DrawBmp( hDC, hCadreH, 0, yPos, SRCCOPY ) yPos := yPos + aPos[12] hBG := StretchedBmp( hDC, hCadreM, aImg, 201, aPos[13] ) NTK_DrawBmp( hDC, hBG, 0, yPos, SRCCOPY ) yPos := yPos + aPos[13] NTK_DrawBmp( hDC, hCadreL, 0, yPos, SRCCOPY ) ENDIF NTK_DeleteObject(hBG) // Filename Box @ 112, 10 SAY "Filename"; INTO CONTEXT hDC ; TEXTCOLOR NTK_RGB(0,0,0) ; FONT hObjFONT1 ; BACKCOLOR TRANSPARENT ; STYLE DT_LEFT **SET RGB COLOR TEXT NTK_RGB(0,0,0) BACKGND TRANSPARENT **@ 125, 6, 150, 195 BOX NTK_BXS_SIMPLE INTO CONTEXT hDC **NTK_SetBkColor( hDC, TRANSPARENT ) **NTK_Rectangle(hDc,10,125,191,145) NTK_MoveTo( hDC, 10, 125 ) NTK_LineTo( hDC, 191, 125 ) NTK_LineTo( hDC, 191, 145 ) NTK_LineTo( hDC, 10, 145 ) NTK_LineTo( hDC, 10, 125 ) // Page Created Tools @ 328, 17 SAY PageCreate[PageTools] ; INTO CONTEXT hDC ; TEXTCOLOR NTK_RGB(0,0,0) ; FONT hObjFONT2 ; BACKCOLOR TRANSPARENT ; STYLE DT_LEFT @ 327, 15 SAY PageCreate[PageTools] ; INTO CONTEXT hDC ; TEXTCOLOR NTK_RGB(255,255,255) ; FONT hObjFONT2 ; BACKCOLOR TRANSPARENT ; STYLE DT_LEFT RETURN(0) ******************************************************************************** // Repaint Objects Window ******************************************************************************** FUNCTION DOREPAINTOBJECTS(hWnd, message, nwParam, nlParam, hDC) LOCAL hBG LOCAL yPos := 0 LOCAL aImg := { 0, 0, 201, 161} LOCAL aPos := {0,31,20,329,20} yPos := aPos[1] NTK_DrawBmp( hDC, hRedBtn, 0, yPos, SRCCOPY ) yPos := yPos + aPos[2] NTK_DrawBmp( hDC, hCadreH, 0, yPos, SRCCOPY ) yPos := yPos + aPos[3] hBG := StretchedBmp( hDC, hCadreM, aImg, 201, aPos[4] ) NTK_DrawBmp( hDC, hBG, 0, yPos, SRCCOPY ) yPos := yPos + aPos[4] NTK_DrawBmp( hDC, hCadreL, 0, yPos, SRCCOPY ) NTK_DeleteObject(hBG) @ 6, 8 SAY "OBJECTS LIST"; INTO CONTEXT hDC ; TEXTCOLOR NTK_RGB(255,255,255) ; FONT hObjFONT2 ; BACKCOLOR TRANSPARENT ; STYLE DT_LEFT RETURN(0) ******************************************************************************** // Repaint Properties Window ******************************************************************************** FUNCTION DOREPAINTPARAM(hWnd, message, nwParam, nlParam, hDC) LOCAL hBG LOCAL yPos := 0 LOCAL aImg := { 0, 0, 201, 161} LOCAL aPos := {0,31,20,229,20} yPos := aPos[1] NTK_DrawBmp( hDC, hRedBtn, 0, yPos, SRCCOPY ) yPos := yPos + aPos[2] NTK_DrawBmp( hDC, hCadreH, 0, yPos, SRCCOPY ) yPos := yPos + aPos[3] hBG := StretchedBmp( hDC, hCadreM, aImg, 201, aPos[4] ) NTK_DrawBmp( hDC, hBG, 0, yPos, SRCCOPY ) yPos := yPos + aPos[4] NTK_DrawBmp( hDC, hCadreL, 0, yPos, SRCCOPY ) NTK_DeleteObject(hBG) @ 6, 8 SAY "OBJECT PARAMETERS"; INTO CONTEXT hDC ; TEXTCOLOR NTK_RGB(255,255,255) ; FONT hObjFONT2 ; BACKCOLOR TRANSPARENT ; STYLE DT_LEFT RETURN(0) ******************************************************************************** // Message box ******************************************************************************** FUNCTION HelloEvent1(hWnd) NTK_MsgBox(hWnd, "Btn #1 has been clicked...", "Bitmap Button") // Some other code here... RETURN Nil ******************************************************************************** // Message box ******************************************************************************** FUNCTION HelloEvent2(hWnd) LOCAL hBtn1 := NTK_GetDlgCtrlID(ID_BTN1, hWnd ) // Retrieve child Btn handle in its parent window... NTK_MsgBox(hWnd, "Btn #2 has been clicked...", "Bitmap Button") // // Some other code here... // IF NTK_IsWindowEnabled( hBtn1 ) NTK_EnableBtn( hBtn1, .F. ) ELSE NTK_EnableBtn( hBtn1, .T. ) ENDIF RETURN Nil ******************************************************************************** // Coordonate of a Center Window and Size of Screen ******************************************************************************** FUNCTION CenterWindow(cxSize,cySize) LOCAL _CXSCREEN := NTK_GetDeviceCaps( NTK_GetDC(), HORZRES ) LOCAL _CYSCREEN := NTK_GetDeviceCaps( NTK_GetDC(), VERTRES ) LOCAL cx,cy cx:=(_CXSCREEN-cxSize)/2 cy:=(_CYSCREEN-cySize)/2 RETURN({cx,cy,_CXSCREEN,_CYSCREEN}) ******************************************************************************** // Stretch a bitmap ******************************************************************************** FUNCTION StretchedBmp( hDc, hBmpSrc, aRcSrc, nBmDstWidth, nBmDstHeight ) LOCAL hBmpDst, aSizeSrc LOCAL hOldBmpSrc, hOldBmpDst nBmDstWidth := IIF( nBmDstWidth == NIL, 0, nBmDstWidth ) nBmDstHeight := IIF( nBmDstHeight== NIL, 0, nBmDstHeight ) aRcSrc := IIF( aRcSrc==NIL, {0,0,0,0}, aRcSrc ) // # HBITMAP RedimBmp(HDC hdc, HBITMAP hBmpSrc, RECT rcSrc, SIZE sizeDst) aSizeSrc = NTK_GetBmpRect(hBmpSrc); // if aRcSrc is set to {0,0,0,0}, take the whole source picture IF ( aRcSrc[RECT_Left]==0 .AND. aRcSrc[RECT_Top]==0 .AND. aRcSrc[RECT_Right]==0 .AND. aRcSrc[RECT_Bottom]==0 ) aRcSrc[RECT_Right] := aSizeSrc[RECT_Right] aRcSrc[RECT_Bottom] := aSizeSrc[RECT_Bottom] ENDIF // check for limits IF (aRcSrc[RECT_Left] < 0) aRcSrc[RECT_Left] := 0 ENDIF IF (aRcSrc[RECT_Top] < 0) aRcSrc[RECT_Top] := 0 ENDIF IF (aRcSrc[RECT_Right] > aSizeSrc[RECT_Right]) aRcSrc[RECT_Right] := aSizeSrc[RECT_Right] ENDIF IF (aRcSrc[RECT_Bottom] > aSizeSrc[RECT_Bottom]) aRcSrc[RECT_Bottom] := aSizeSrc[RECT_Bottom] ENDIF // We don't resize anything when nBmDstWidth==0 nBmDstHeight==0 IF (nBmDstWidth==0 .AND. nBmDstHeight==0) nBmDstWidth := aRcSrc[RECT_Right] - aRcSrc[RECT_Left] nBmDstHeight := aRcSrc[RECT_Bottom] - aRcSrc[RECT_Top] ENDIF // Creates comptatible DC and destination Bitmap hDCSrc := NTK_CreateCompatibleDC(hDc) hDCDst := NTK_CreateCompatibleDC(hDc) hBmpDst := NTK_CreateCompatibleBitmap(hDc, nBmDstWidth, nBmDstHeight) // Stores bitmaps into DCs (and save old ones) hOldBmpSrc := NTK_SelectObject(hDCSrc, hBmpSrc) hOldBmpDst := NTK_SelectObject(hDCDst, hBmpDst) // copy NTK_SetStretchBltMode(hDCDst, HALFTONE) NTK_StretchBlt(hDCDst, 0, 0, nBmDstWidth, nBmDstHeight, hDCSrc,; aRcSrc[RECT_Left], aRcSrc[RECT_Top],; (aRcSrc[RECT_Right]-aRcSrc[RECT_Left]), (aRcSrc[RECT_Bottom]-aRcSrc[RECT_Top]),; SRCCOPY) // Destroy old bitmaps & DCs NTK_SelectObject(hDCSrc, hOldBmpSrc) NTK_SelectObject(hDCDst, hOldBmpDst) // Destroy current DCs NTK_DeleteDC(hDCSrc) NTK_DeleteDC(hDCDst) RETURN( hBmpDst ) //***************************************************************************// //********************* *******************// // END OF THE PROGRAM // //********************* *******************// //***************************************************************************//