📄 iedde.c
字号:
DdeFreeStringHandle( IdInst, hService );
hService = (HSZ)NULL;
}
}
BOOL IEHData2Mem( HDDEDATA hData, void **mem, uint_32 *size )
{
if( ( hData == (HDDEDATA)NULL ) && mem && size ) {
return( FALSE );
}
*size = (uint_32)DdeGetData( hData, NULL, 0, 0 );
if( *size == 0 ) {
return( FALSE );
}
*mem = MemAlloc( *size );
if( *mem == NULL ) {
return( FALSE );
}
if( (DWORD)*size != DdeGetData( hData, *mem, (DWORD)*size, 0 ) ) {
MemFree( *mem );
*mem = NULL;
return( FALSE );
}
return( TRUE );
}
HDDEDATA IECreateResData( img_node *node )
{
HDDEDATA hdata;
BYTE *data;
uint_32 size;
BOOL ok;
data = NULL;
hdata = (HDDEDATA)NULL;
ok = ( ( node != NULL ) && ( EditFormat != DDENone ) );
if( ok ) {
switch( node->imgtype ) {
case BITMAP_IMG:
ok = saveBitmapToData( node, &data, &size );
break;
case ICON_IMG:
case CURSOR_IMG:
ok = saveImgToData( node, &data, &size );
break;
default:
ok = FALSE;
}
}
if( ok ) {
hdata = DdeCreateDataHandle( IdInst, (LPBYTE)data, size, 0, hDataItem,
IEClipFormats[EditFormat].format, 0 );
}
if( data ) {
MemFree( data );
}
return( hdata );
}
img_node *IEGetCurrentImageNode( void )
{
img_node *node;
img_node *root;
node = GetCurrentNode();
if( node == NULL ) {
return( NULL );
}
root = GetImageNode( node->hwnd );
if( root == NULL ) {
return( NULL );
}
return( root );
}
BOOL IEUpdateDDEEditSession( void )
{
img_node *node;
HDDEDATA hdata;
BOOL ok;
hdata = (HDDEDATA)NULL;
node = IEGetCurrentImageNode();
ok = ( ( IEClientConv != (HCONV)NULL ) && ( node != NULL ) &&
( EditFormat != DDENone ) );
if( ok ) {
hdata = IECreateResData( node );
ok = ( hdata != (HDDEDATA)NULL );
}
if( ok ) {
ok = (BOOL) DdeClientTransaction( (LPBYTE)hdata, -1, IEClientConv,
hDataItem,
IEClipFormats[EditFormat].format,
XTYP_POKE, TIME_OUT, NULL );
}
if( hdata != (HDDEDATA)NULL ) {
DdeFreeDataHandle( hdata );
}
if( ok ) {
SetIsSaved( node->hwnd, TRUE );
}
return( ok );
}
BOOL IEStartDDEEditSession( void )
{
char *filename;
HDDEDATA hData;
void *data;
DWORD ret;
uint_32 size;
BOOL ok;
ok = ( EditFormat != DDENone );
if( ok ) {
hData = DdeClientTransaction( NULL, 0, IEClientConv, hFileItem,
IEClipFormats[EditFormat].format,
XTYP_REQUEST, TIME_OUT, &ret );
ok = ( hData != (HDDEDATA)NULL );
}
if( ok ) {
ok = IEHData2Mem( hData, &filename, &size );
DdeFreeDataHandle( hData );
}
if( ok ) {
hData = DdeClientTransaction( NULL, 0, IEClientConv, hDataItem,
IEClipFormats[EditFormat].format,
XTYP_REQUEST, TIME_OUT, &ret );
}
if( ok ) {
if( hData != (HDDEDATA)NULL ) {
ok = IEHData2Mem( hData, &data, &size );
DdeFreeDataHandle( hData );
} else {
data = NULL;
}
}
if( ok ) {
switch( EditFormat ) {
case DDEBitmap:
if( data ) {
ok = readBitmapFromData( data, filename, NULL, NULL );
} else {
ok = NewImage( BITMAP_IMG, NULL );
}
break;
case DDECursor:
if( data ) {
ok = readCursorFromData( data, filename, NULL, NULL );
} else {
ok = NewImage( CURSOR_IMG, NULL );
}
break;
case DDEIcon:
if( data ) {
ok = readIconFromData( data, filename, NULL, NULL );
} else {
ok = NewImage( ICON_IMG, NULL );
}
break;
default:
ok = FALSE;
}
}
if( filename ) {
MemFree( filename );
}
if( data ) {
MemFree( data );
}
return( ok );
}
static BOOL GotEndSession = FALSE;
void IEHandlePokedData( HDDEDATA hdata )
{
void *cmd;
uint_32 size;
if( hdata == (HDDEDATA)NULL ) {
return;
}
if( !IEHData2Mem( hdata, &cmd, &size ) || !cmd ) {
return;
}
if( !stricmp( cmd, "show" ) ) {
ShowWindow( HMainWindow, SW_RESTORE );
ShowWindow( HMainWindow, SW_SHOWNA );
} else if( !stricmp( cmd, "hide" ) ) {
ShowWindow( HMainWindow, SW_SHOWMINNOACTIVE );
ShowWindow( HMainWindow, SW_HIDE );
} else if( !stricmp( cmd, "endsession" ) ) {
if( GotEndSession == FALSE ) {
GotEndSession = TRUE;
CloseAllImages();
}
} else if( !stricmp( cmd, "bringtofront" ) ) {
if( IsIconic( HMainWindow ) ) {
ShowWindow( HMainWindow, SW_RESTORE );
}
#ifdef __NT__
SetWindowPos( HMainWindow, HWND_TOPMOST, 0,0,0,0, SWP_NOMOVE | SWP_NOSIZE );
SetWindowPos( HMainWindow, HWND_TOP, 0,0,0,0, SWP_NOMOVE | SWP_NOSIZE );
SetWindowPos( HMainWindow, HWND_NOTOPMOST, 0,0,0,0, SWP_NOMOVE | SWP_NOSIZE );
SetForegroundWindow( HMainWindow );
#else
SetActiveWindow( HMainWindow );
SetWindowPos( HMainWindow, HWND_TOP, 0,0,0,0, SWP_NOMOVE | SWP_NOSIZE );
#endif
}
MemFree( cmd );
}
HDDEDATA CALLBACK DdeCallBack( WORD wType, WORD wFmt, HCONV hConv,
HSZ hsz1, HSZ hsz2, HDDEDATA hdata,
DWORD lData1, DWORD lData2 )
{
img_node *node;
HSZPAIR hszpair[2];
HDDEDATA ret;
int i;
_imged_touch(wFmt);
_imged_touch(hdata);
_imged_touch(lData1);
_imged_touch(lData2);
ret = (HDDEDATA)NULL;
switch( wType ) {
case XTYP_CONNECT_CONFIRM:
IEServerConv = hConv;
break;
case XTYP_DISCONNECT:
IEServerConv = (HCONV)NULL;
IEClientConv = (HCONV)NULL;
SendMessage( HMainWindow, WM_CLOSE, (WPARAM)1, 0 );
break;
case XTYP_CONNECT:
for( i=0; i<NUM_FORMATS; i++ ) {
if( IEServices[i].htopic == hsz1 ) {
EditFormat = (IEEditFormat)i;
ret = (HDDEDATA)TRUE;
}
}
break;
case XTYP_WILDCONNECT:
for( i=0; i<NUM_FORMATS; i++ ) {
if( IEServices[i].hservice == hsz2 ) {
break;
}
}
if( i == NUM_FORMATS ) {
break;
}
hszpair[0].hszSvc = IEServices[i].hservice;
hszpair[0].hszTopic = IEServices[i].htopic;
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 == IEClipFormats[EditFormat].format ) {
if( hsz1 == IEServices[EditFormat].htopic ) {
node = IEGetCurrentImageNode();
if( hsz2 == hDataItem ) {
ret = IECreateResData( node );
}
}
}
break;
case XTYP_POKE:
ret = (HDDEDATA)DDE_FNOTPROCESSED;
if( hsz1 == IEServices[EditFormat].htopic ) {
if( hsz2 == hDataItem ) {
IEHandlePokedData( hdata );
ret = (HDDEDATA)DDE_FACK;
}
}
break;
}
return( ret );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -