📄 wdedde.c
字号:
hdata = DdeCreateDataHandle( IdInst, (LPBYTE)data, size, 0,
hNameItem, WdeDataClipbdFormat, 0 );
WdeMemFree( data );
}
return( hdata );
}
HDDEDATA WdeCreateResData( WdeResDlgItem *ditem )
{
HDDEDATA hdata;
void *data;
uint_32 size;
hdata = (HDDEDATA)NULL;
if( WdeGetItemData( ditem, &data, &size ) ) {
hdata = DdeCreateDataHandle( IdInst, (LPBYTE)data, size, 0,
hDataItem, WdeDataClipbdFormat, 0 );
WdeMemFree( data );
}
return( hdata );
}
WdeResDlgItem *WdeGetDlgItem( void )
{
WdeResInfo *rinfo;
WdeResDlgItem *ditem;
ditem = NULL;
rinfo = WdeGetCurrentRes();
if( rinfo && rinfo->dlg_item_list ) {
ditem = (WdeResDlgItem *) ListElement( rinfo->dlg_item_list );
}
return( ditem );
}
Bool WdeUpdateDDEEditSession( void )
{
WdeResInfo *rinfo;
WdeResDlgItem *ditem;
HDDEDATA hdata;
Bool ok;
hdata = (HDDEDATA)NULL;
ditem = WdeGetDlgItem();
ok = ( ( WdeClientConv != (HCONV)NULL ) && ( ditem != NULL ) );
if( ok ) {
hdata = WdeCreateResData( ditem );
ok = ( hdata != (HDDEDATA)NULL );
}
if( ok ) {
ok = (Bool) DdeClientTransaction( (LPBYTE)hdata, -1, WdeClientConv,
hDataItem, WdeDataClipbdFormat,
XTYP_POKE, TIME_OUT, NULL );
}
if( hdata != (HDDEDATA)NULL ) {
DdeFreeDataHandle( hdata );
}
if( ok ) {
hdata = WdeCreateResNameData( ditem->dialog_name, ditem->is32bit );
ok = ( hdata != (HDDEDATA)NULL );
}
if( ok ) {
ok = (Bool) DdeClientTransaction( (LPBYTE)hdata, -1, WdeClientConv,
hNameItem, WdeDataClipbdFormat,
XTYP_POKE, TIME_OUT, NULL );
}
if( hdata != (HDDEDATA)NULL ) {
DdeFreeDataHandle( hdata );
}
if( ok ) {
rinfo = WdeGetCurrentRes();
WdeSetResModified( rinfo, FALSE );
}
return( ok );
}
Bool WdeStartDDEEditSession( void )
{
WdeResInfo *rinfo;
WdeResDlgItem *ditem;
char *filename;
HDDEDATA hData;
void *data;
DWORD ret;
uint_32 size;
OBJPTR object;
Bool ok;
object = NULL;
ditem = WdeAllocResDlgItem();
ok = ( ditem != NULL );
if( ok ) {
hData = DdeClientTransaction( NULL, 0, WdeClientConv,
hFileItem, WdeDataClipbdFormat,
XTYP_REQUEST, TIME_OUT, &ret );
ok = ( hData != (HDDEDATA)NULL );
}
if( ok ) {
filename = (char *)WdeHData2Mem( hData );
DdeFreeDataHandle( hData );
ok = ( filename != NULL );
}
if( ok ) {
hData = DdeClientTransaction( NULL, 0, WdeClientConv,
hIs32BitItem, WdeDataClipbdFormat,
XTYP_REQUEST, TIME_OUT, &ret );
if( hData != (HDDEDATA)NULL ) {
ditem->is32bit = TRUE;
DdeFreeDataHandle( hData );
}
}
if( ok ) {
hData = DdeClientTransaction( NULL, 0, WdeClientConv,
hNameItem, WdeDataClipbdFormat,
XTYP_REQUEST, TIME_OUT, &ret );
ok = ( hData != (HDDEDATA)NULL );
}
if( ok ) {
data = WdeHData2Mem( hData );
DdeFreeDataHandle( hData );
ok = ( data != NULL );
}
if( ok ) {
ditem->dialog_name = WRMem2WResID( data, ditem->is32bit );
ok = ( ditem->dialog_name != NULL );
WdeMemFree( data );
}
if( ok ) {
hData = DdeClientTransaction( NULL, 0, WdeClientConv,
hDataItem, WdeDataClipbdFormat,
XTYP_REQUEST, TIME_OUT, &ret );
if( hData != (HDDEDATA)NULL ) {
data = WdeHData2Mem( hData );
size = (int)DdeGetData( hData, NULL, 0, 0 );
DdeFreeDataHandle( hData );
if( data ) {
ditem->dialog_info = WdeMem2DBI( (uint_8 *)data, size,
ditem->is32bit );
ok = ( ditem->dialog_info != NULL );
WdeMemFree( data );
} else {
ok = FALSE;
}
}
}
if( ok ) {
rinfo = WdeCreateNewResource( filename );
ok = ( rinfo != NULL );
}
if( ok ) {
if( ditem->dialog_info ) {
ok = WdeOpenDialogFromResInfo( rinfo, ditem );
if( ok ) {
WdeAddResDlgItemToResInfo( rinfo, ditem );
object = ditem->object;
}
} else {
object = WdeCreateNewDialog( ditem->dialog_name, ditem->is32bit );
if( ditem ) {
WdeFreeResDlgItem( &ditem, TRUE );
}
ditem = NULL;
}
ok = ok && ( object != NULL );
}
if( ok ) {
MakeObjectCurrent( object );
}
if( !ok ) {
if( ditem ) {
WdeFreeResDlgItem( &ditem, TRUE );
}
if( rinfo ) {
WdeFreeResInfo( rinfo );
}
}
if( filename ) {
WdeMemFree( filename );
}
return( ok );
}
static Bool GotEndSession = FALSE;
void WdeHandlePokedData( HDDEDATA hdata )
{
HWND main;
char *cmd;
WdeResInfo *rinfo;
if( hdata == (HDDEDATA)NULL ) {
return;
}
cmd = (char *)WdeHData2Mem( hdata );
if( cmd == NULL ) {
return;
}
main = WdeGetMainWindowHandle();
if( !stricmp( cmd, "show" ) ) {
ShowWindow( main, SW_RESTORE );
ShowWindow( main, SW_SHOWNA );
} else if( !stricmp( cmd, "hide" ) ) {
ShowWindow( main, SW_SHOWMINNOACTIVE );
ShowWindow( main, SW_HIDE );
} else if( !stricmp( cmd, "endsession" ) ) {
if( GotEndSession == FALSE ) {
GotEndSession = TRUE;
rinfo = WdeGetCurrentRes();
WdeDestroyResourceWindow( rinfo );
}
} else if( !stricmp( cmd, "bringtofront" ) ) {
if( IsIconic( main ) ) {
ShowWindow( main, SW_RESTORE );
}
#ifdef __NT__
SetWindowPos( main, HWND_TOPMOST, 0,0,0,0, SWP_NOMOVE | SWP_NOSIZE );
SetWindowPos( main, HWND_TOP, 0,0,0,0, SWP_NOMOVE | SWP_NOSIZE );
SetWindowPos( main, HWND_NOTOPMOST, 0,0,0,0, SWP_NOMOVE | SWP_NOSIZE );
SetForegroundWindow( main );
#else
SetActiveWindow( main );
SetWindowPos( main, HWND_TOP, 0,0,0,0, SWP_NOMOVE | SWP_NOSIZE );
#endif
}
WdeMemFree( cmd );
}
HDDEDATA WINEXPORT DdeCallBack( WORD wType, WORD wFmt, HCONV hConv,
HSZ hsz1, HSZ hsz2, HDDEDATA hdata,
DWORD lData1, DWORD lData2 )
{
HWND hmain;
HSZPAIR hszpair[2];
HDDEDATA ret;
WdeResDlgItem *ditem;
_wde_touch(wFmt);
_wde_touch(hdata);
_wde_touch(lData1);
_wde_touch(lData2);
ret = (HDDEDATA)NULL;
switch( wType ) {
case XTYP_CONNECT_CONFIRM:
WdeServerConv = hConv;
break;
case XTYP_DISCONNECT:
WdeServerConv = (HCONV)NULL;
WdeClientConv = (HCONV)NULL;
hmain = WdeGetMainWindowHandle();
SendMessage( hmain, WM_CLOSE, (WPARAM)1, 0 );
break;
case XTYP_CONNECT:
if( (WdeServerConv == (HCONV)NULL) && (hsz1 == hDialogTopic) ) {
ret = (HDDEDATA)TRUE;
}
break;
case XTYP_WILDCONNECT:
if( hsz2 != hDialogService ) {
break;
}
hszpair[0].hszSvc = hDialogService;
hszpair[0].hszTopic = hDialogTopic;
hszpair[1].hszSvc = (HSZ)NULL;
hszpair[1].hszTopic = (HSZ)NULL;
ret = (HDDEDATA)
DdeCreateDataHandle( IdInst, (LPBYTE)&hszpair[0],
sizeof(hszpair), 0L, 0, CF_TEXT, 0 );
break;
case XTYP_REQUEST:
if( wFmt == WdeDataClipbdFormat ) {
if( hsz1 == hTopic ) {
ditem = WdeGetDlgItem();
if( hsz2 == hDataItem ) {
ret = WdeCreateResData( ditem );
} else if( hsz2 == hNameItem ) {
ret = WdeCreateResNameData( ditem->dialog_name, ditem->is32bit );
}
}
}
break;
case XTYP_POKE:
ret = (HDDEDATA)DDE_FNOTPROCESSED;
if( hsz1 == hDialogTopic ) {
if( hsz2 == hDataItem ) {
WdeHandlePokedData( hdata );
ret = (HDDEDATA)DDE_FACK;
}
}
break;
}
return( ret );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -