xcode — Как отобразить поле ввода в Mac OSX с помощью переполнения стека

Хорошо. Здесь ситуация, я средний разработчик C ++. У меня нет опыта работы с Objective C или Cocoa.

Я работаю над проектом в настоящее время в OSX с Carbon [я тоже новичок в углероде], и уже 3 месяца кодирую на чистом C ++.

Теперь я сталкиваюсь с проблемой, когда мне нужно отобразить окно ввода для пользователя и получить от него некоторую информацию, скажем, USERNAME, практически не зная, как отображаются поля ввода в OSX, каковы мои варианты. Я занимался программированием на win32, поэтому пару часов чтения и 1 час программирования должны сделать эту работу за меня. Мне просто нужно немного помочь, чтобы направить меня в правильном направлении.

Вот что я получил от Googling немного …

Есть 3 способа, которые могут быть использованы для реализации поля ввода в OSX

1- Используйте углерод, Я был в состоянии отобразить простое диалоговое окно, используя его. Я не знаю, как я могу использовать поля ввода там ..
Вот код, который я пробовал для поля ввода.

   DialogRef    dialog = GetNewDialog (128, NULL, (WindowRef)-1);
WindowRef lay;
ControlRef   outControl;

Rect boundsRect;

boundsRect.top = 0;
boundsRect.left = 0;
boundsRect.right = 200;
boundsRect.bottom = 99;lay = GetDialogWindow(dialog);

CreateEditTextControl (lay, &boundsRect, NULL, false, true, NULL, &outControl);

InstallStandardEventHandler(GetWindowEventTarget (lay));

ShowWindow (lay);

Я не смог ничего увидеть, когда запустил программу, и Xcode показывал предупреждение о
CreateEditTextControl говоря, что это устарело.

Вариант 2 что я должен объединить Objective C и C ++, но я не знаю, как работает цель C, вот небольшое преимущество, которое я получил в выполнении этот. У меня есть только несколько часов, чтобы сделать это.

Вариант 3
я нашел это Вот.

//
// test1.cpp
// This program shows how to access Cocoa GUI from pure C/C++
// and build a truly functional GUI application (although very simple).

// Compile using:
//   g++ -framework Cocoa -o test1 test1.cpp
//
// that will output 'test1' binary.
//#include <CoreFoundation/CoreFoundation.h>
#include <objc/objc.h>
#include <objc/objc-runtime.h>
#include <iostream>

extern "C" int NSRunAlertPanel(CFStringRef strTitle, CFStringRef strMsg,
CFStringRef strButton1, CFStringRef strButton2,
CFStringRef strButton3, ...);int main(int argc, char** argv)
{
id app = NULL;
id pool = objc_getClass("NSAutoreleasePool");
if (!pool)
{
std::cerr << "Unable to get NSAutoreleasePool!\nAborting\n";
return -1;
}
pool = objc_msgSend(pool, sel_registerName("alloc"));
if (!pool)
{
std::cerr << "Unable to create NSAutoreleasePool...\nAborting...\n";
return -1;
}
pool = objc_msgSend(pool, sel_registerName("init"));

app = objc_msgSend(objc_getClass("NSApplication"),
sel_registerName("sharedApplication"));

NSRunAlertPanel(CFSTR("Testing"),
CFSTR("This is a simple test to display NSAlertPanel."),
CFSTR("OK"), NULL, NULL);

objc_msgSend(pool, sel_registerName("release"));
return 0;
}

2

Решение

Весь пользовательский интерфейс Carbon устарел и не может использоваться для 64-битной разработки.

Третья альтернатива будет CFUserNotification.

2

Другие решения

Использование option2 : Какао фреймворк предоставляет вам все наборы простых элементов управления, Messagbox и другие. Но там нет inputBox. 🙁

Однако вы можете создать свой собственный inputBox или изменить панель оповещений, как я сделал здесь:

- (NSString *)inputBox: (NSString *)prompt{
NSAlert *alert = [NSAlert alertWithMessageText: prompt
defaultButton:@"OK"alternateButton:@"Cancel"otherButton:nil
informativeTextWithFormat:@""];

NSTextField *input = [[NSTextField alloc] initWithFrame:NSMakeRect(0, 0, 200, 24)];
[alert setAccessoryView:input];
NSInteger button = [alert runModal];
if (button == NSAlertDefaultReturn) {
[input validateEditing];
return [input stringValue];
}
else if (button == NSAlertAlternateReturn) {
return nil;
}
else {
return nil;
}
}
2

По вопросам рекламы [email protected]