📄 frame.c
字号:
strcpy(cg, rstring(IDS_PF_MONITOR));
BoolProfile(spectrumBarGraph, cg, rstring(IDS_PF_MON_BARGRAPH), TRUE);
BoolProfile(spectrumVoicePrint, cg, rstring(IDS_PF_MON_VOICEPRINT), FALSE);
BoolProfile(spectrumTransmitOnly, cg, rstring(IDS_PF_MON_TRANSMIT), FALSE);
BoolProfile(spectrumReceiveOnly, cg, rstring(IDS_PF_MON_RECEIVE), FALSE);
BoolProfile(spectrumMaxEnergy, cg, rstring(IDS_PF_MON_ENV_MAX), FALSE);
#undef BoolProfile
useSendNotSendto = waNetUseSend;
// Check out the audio hardware
halfDuplex = isHalfDuplex(hwnd);
// Create the timeout timer
if (SetTimer(hwnd, FRAME_TIMER_ID, 1000, NULL) == 0) {
MsgBox(NULL, MB_ICONSTOP | MB_OK, Format(15));
return -1;
}
// Calculate packet size based on selected modes
currentInputLength = inputBufferLength();
currentInputSamples = inputSampleCount();
// Get textmetric data
hdc = GetDC(hwnd);
ofont = SelectObject(hdc, GetStockObject(ANSI_VAR_FONT));
GetTextMetrics(hdc, &tm);
SelectObject(hdc, ofont);
ReleaseDC(hwnd, hdc);
tmAveCharWidth = (INT) tm.tmAveCharWidth;
tmHeight = (INT) tm.tmHeight;
DragAcceptFiles(hwnd, TRUE);
/* If an answering machine message file was named, open
it. This doesn't imply we're recording messages; that's
controlled by answerRecord. */
if (answerFileName[0] != 0) {
answerOpen();
}
// Open the face image file, if any
V openFaceFile(hwnd);
/* If we're publishing our information with a Look Who's Listening
server, establish contact with it. */
V lwl_reconnect(hwnd);
// Finally, open the input sockets for business.
if (WSAAsyncSelect(sCommand, hwnd, WM_SOCKET_SELECT, FD_READ) != 0) {
serr = WSAGetLastError();
}
if (serr != 0) {
MsgBox(NULL, MB_ICONSTOP | MB_OK, Format(14),
serr, SockerrToString(serr));
}
if (WSAAsyncSelect(sControl, hwnd, WM_SOCKET_CONTROL, FD_READ) != 0) {
serr = WSAGetLastError();
}
if (serr != 0) {
MsgBox(NULL, MB_ICONSTOP | MB_OK, Format(14),
serr, SockerrToString(serr));
}
createSuccessful = TRUE;
return TRUE;
}
/* onCommand -- Dispatch WM_COMMAND messages. Some are processed
at the frame level, some sent to the MDI client,
and others forwarded to the active MDI connection
window. */
static VOID onCommand(HWND hwnd, INT id, HWND hwndCtl, UINT codeNotify)
{
if (id > IDM_CUSTOM && id <= (IDM_CUSTOM + rememberedConnections)) {
newConnection(hwnd, rememberedConnection[(id - IDM_CUSTOM) - 1], NULL);
return;
}
switch (id) {
case IDM_CONNECTION_NEW:
newConnection(hwnd, NULL, NULL);
break;
case IDM_CONN_OPEN:
{
OPENFILENAME ofn;
char cfName[MAX_PATH];
memset(&ofn, 0, sizeof(ofn));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hwnd;
ofn.lpstrFilter = rfilter(IDS_T_CONNECTION_FILTER);
ofn.lpstrCustomFilter = NULL;
cfName[0] = 0;
ofn.lpstrFile = (LPSTR) cfName;
ofn.nMaxFile = sizeof cfName;
ofn.lpstrInitialDir = NULL;
ofn.lpstrTitle = rstring(IDS_T_CONNECTION_OPEN_TITLE);
ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_SHOWHELP;
fileHelpKey = rstring(IDS_HELP_OPEN_CONNECTION);
if (GetOpenFileName((LPOPENFILENAME) &ofn) == 0) {
break;
}
newConnection(hwnd, cfName, NULL);
}
break;
case IDM_CONN_SAVE_AS:
{
OPENFILENAME ofn;
HWND cWnd = getActiveConnection();
if (cWnd != NULL) {
LPCLIENT_DATA d = CLIENTPTR(cWnd);
d->timeout = -1; // Make connection immortal
memset(&ofn, 0, sizeof(ofn));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hwnd;
ofn.lpstrDefExt = "SFX";
ofn.lpstrFilter = rfilter(IDS_T_CONNECTION_FILTER);
ofn.lpstrCustomFilter = NULL;
d->szFile[0] = 0;
ofn.lpstrFile = (LPSTR) d->connectionFileName;
ofn.nMaxFile = sizeof d->connectionFileName;
ofn.lpstrInitialDir = NULL;
ofn.lpstrTitle = rstring(IDS_T_CONNECTION_SAVE_TITLE);
ofn.Flags = OFN_NOREADONLYRETURN | OFN_OVERWRITEPROMPT |
OFN_HIDEREADONLY | OFN_SHOWHELP;
fileHelpKey = rstring(IDS_HELP_SAVE_CONNECTION);
if (GetSaveFileName((LPOPENFILENAME) &ofn) == 0) {
break;
}
}
}
// Wheee!!! Note fall-through
case IDM_CONN_SAVE:
{
HWND cWnd = getActiveConnection();
if (cWnd != NULL) {
LPCLIENT_DATA d = CLIENTPTR(cWnd);
char mcs[10], pno[10];
wsprintf(mcs, Format(5), d->multicast_scope);
wsprintf(pno, Format(5), d->port);
d->timeout = -1; // Make connection immortal
if (WritePrivateProfileString(rstring(IDS_PF_HOST), rstring(IDS_PF_HOST_NAME),
d->szHost, d->connectionFileName) == 0 ||
WritePrivateProfileString(rstring(IDS_PF_HOST), rstring(IDS_PF_NETADDR),
inet_ntoa(d->inetSock.sin_addr), d->connectionFileName) == 0 ||
WritePrivateProfileString(rstring(IDS_PF_HOST), rstring(IDS_PF_PORT_NUMBER),
pno, d->connectionFileName) == 0 ||
WritePrivateProfileString(rstring(IDS_PF_DEBUG), rstring(IDS_PF_DEBUGGING),
d->debugging ? kS1 : kS0, d->connectionFileName) == 0 ||
WritePrivateProfileString(rstring(IDS_PF_DEBUG), rstring(IDS_PF_LOOPBACK),
d->loopback ? kS1 : kS0, d->connectionFileName) == 0 ||
WritePrivateProfileString(rstring(IDS_PF_MULTICAST), rstring(IDS_PF_SCOPE),
mcs, d->connectionFileName) == 0 ||
WritePrivateProfileString(rstring(IDS_PF_ENCRYPTION), rstring(IDS_PF_SAVE_KEYS),
d->saveKeys ? kS1 : kS0, d->connectionFileName) == 0 ||
WritePrivateProfileString(rstring(IDS_PF_ENCRYPTION), rstring(IDS_PF_PGP_USER_NAMES),
d->opgpUserList, d->connectionFileName) == 0 ||
(!d->saveKeys ? 0 : (
WritePrivateProfileString(rstring(IDS_PF_ENCRYPTION), rstring(IDS_PF_DES_KEY),
d->desKeyString, d->connectionFileName) == 0 ||
WritePrivateProfileString(rstring(IDS_PF_ENCRYPTION), rstring(IDS_PF_IDEA_KEY),
d->ideaKeyString, d->connectionFileName) == 0 ||
WritePrivateProfileString(rstring(IDS_PF_ENCRYPTION), rstring(IDS_PF_BLOWFISH_KEY),
d->blowfishKeyString, d->connectionFileName) == 0 ||
WritePrivateProfileString(rstring(IDS_PF_ENCRYPTION), rstring(IDS_PF_KEY_FILE),
d->otpFileName, d->connectionFileName) == 0))) {
MessageBox(hwnd, rstring(IDS_T_CONN_SAVE_ERR), NULL,
MB_OK | MB_ICONEXCLAMATION);
} else {
rememberNewConnection(d->connectionFileName);
}
}
}
break;
case IDM_CONN_PROPERTIES:
{
HWND cWnd = getActiveConnection();
if (cWnd != NULL) {
CLIENTPTR(cWnd)->timeout = -1; // Make connection immortal
connectionProperties(cWnd, CLIENTPTR(cWnd));
}
}
break;
case IDM_CONN_RING:
{
HWND cWnd = getActiveConnection();
if (cWnd != NULL) {
CLIENTPTR(cWnd)->ring = TRUE;
}
}
// Wheee!!! Fall through into Send Sound File
case IDM_SEND_SOUND_FILE:
{
OPENFILENAME ofn;
HWND cWnd = getActiveConnection();
if (cWnd != NULL) {
LPCLIENT_DATA d = CLIENTPTR(cWnd);
int originalTimeout = d->timeout;
int ringer = d->ring;
/* Make the window "temporarily immortal" so it doesn't
disappear due to timeout while the send file dialogue
is up. */
d->ring = FALSE;
d->timeout = -1;
if (d->hFile == HFILE_ERROR && d->mmioHandle == NULL) {
int s = FALSE;
memset(&ofn, 0, sizeof(ofn));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hwnd;
ofn.lpstrFilter = rfilter(IDS_T_SOUND_FILE_FILTER);
ofn.lpstrCustomFilter = NULL;
d->szFile[0] = 0;
ofn.lpstrFile = (LPSTR) d->szFile;
ofn.nMaxFile = sizeof(d->szFile);
ofn.lpstrInitialDir = NULL;
ofn.lpstrTitle = ringer ? rstring(IDS_T_RING_TITLE) :
rstring(IDS_T_SEND_SOUND_TITLE);
ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_SHOWHELP;
fileHelpKey = ringer ? rstring(IDS_HELP_RING_FILE) :
rstring(IDS_HELP_SEND_SOUND_FILE);
if (ringer && ringFileName[0] != 0) {
HFILE hFile;
hFile = _lopen(ringFileName, OF_READ | OF_SHARE_DENY_WRITE);
if (hFile != HFILE_ERROR) {
_lclose(hFile);
strcpy(d->szFile, ringFileName);
s = TRUE;
}
}
if (!s) {
s = GetOpenFileName((LPOPENFILENAME) &ofn);
if (ringer) {
strcpy(ringFileName, d->szFile);
}
}
if (s) {
startSoundFile(cWnd, d->szFile);
} else {
/* User canceled send file dialogue. Restore
timeout to the original value. */
d->timeout = originalTimeout;
}
} else {
d->quitSoundFile = TRUE;
}
}
}
break;
case IDM_CO_REPONDEUR:
answerDialogue(hwnd);
break;
case IDM_CO_RECORD:
answerRecord = !answerRecord;
if (hDlgAnswer != NULL) {
CheckDlgButton(hDlgAnswer, IDC_RP_RECORD, answerEnabled() && answerRecord);
}
break;
#ifdef BROADCAST_SUPPORT
case IDM_CONN_BROADCAST:
if (bConferencing)
{
MessageBox(NULL,"Cannot broadcast when in conference mode.\n"
"Please select Conference from the Connection menu to "
"return to normal mode first.", "Speak Freely",
MB_ICONEXCLAMATION);
break; //Don't allow broadcast while conferencing.
}
broadcasting = !broadcasting;
if (broadcasting) {
HWND hwnd = GetWindow(hwndMDIClient, GW_CHILD);
DWORD bstart = GetTickCount();
// Clear wants input in any sending windows
while (hwnd != NULL) {
if ((WNDPROC) GetWindowLong(hwnd, GWL_WNDPROC) == ((WNDPROC) connectWndProc)) {
LPCLIENT_DATA pClientData = CLIENTPTR(hwnd);
if (pClientData != NULL) {
pClientData->wantsInput = FALSE;
pClientData->broadcastBeginTime = bstart;
pClientData->broadcastEnd = FALSE;
}
}
hwnd = GetWindow(hwnd, GW_HWNDNEXT);
}
listeners = 0;
if (!inputActive) {
V startWaveInput(hwnd);
inputPaused = FALSE;
}
} else {
terminateWaveInput();
inputPaused = FALSE;
SetCursor(LoadCursor(NULL, IDC_ARROW));
}
SetWindowText(hwndMDIFrame, rstring(broadcasting ?
IDS_T_APP_TITLE_BROADCAST : IDS_T_APP_TITLE_NORM));
break;
#endif // BROADCAST_SUPPORT
#ifdef CONFERENCE_SUPPORT
case IDM_CONN_CONFERENCE:
if (broadcasting)
{
MessageBox(NULL,"Cannot conference when in broadcast mode.\n"
"Please select Broadcast from the Connection menu to "
"return to normal mode first.", "Speak Freely",
MB_ICONEXCLAMATION);
break; //Don't allow broadcast while conferencing.
}
bConferencing = !bConferencing;
if (bConferencing)
{
HWND hwnd = GetWindow(hwndMDIClient, GW_CHILD);
DWORD bstart = GetTickCount();
// Clear wants input in any sending windows
while (hwnd != NULL)
{
if ((WNDPROC) GetWindowLong(hwnd, GWL_WNDPROC) == ((WNDPROC) connectWndProc))
{
LPCLIENT_DATA pClientData = CLIENTPTR(hwnd);
if (pClientData != NULL)
{
pClientData->wantsInput = FALSE;
pClientData->broadcastBeginTime = bstart;
pClientData->broadcastEnd = FALSE;
}
}
hwnd = GetWindow(hwnd, GW_HWNDNEXT);
}
listeners = 0;
if (!input
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -