2010-03-20 27 views
7

Supongamos que usted es un estudiante de TI con conocimientos básicos de C++ y C#. Supongamos que se desea diseñar aplicaciones que:Pregunta difícil en WPF, Win32, MFC

  1. necesidad de ofrecer algo de rendimiento como archivadores, algoritmos criptográficos, códecs
  2. uso
  3. maquillaje de algunas llamadas al sistema
  4. tienen una interfaz gráfica de usuario

y desea aprender un Api que le permitirá escribir aplicaciones como las descritas anteriormente y:

  1. es la corriente principal
  2. es actualizable
  3. le da derecho a un trabajo digno
  4. es bastante fácil - me refiero fácil como VCL, no es fácil como winapi

Por lo tanto, haciendo que estas suposiciones, lo Api va a elegir ? MFC, WPF, otro? Me gustan mucho VCL y QT, pero no son comunes y creo que pocos empleadores querrán que escribas aplicaciones en QT o Visual C++ Builder ...

Gracias por responder.

+1

"Supongamos que eres un estudiante de TI con conocimientos básicos de C++ y C#." Ahora sabemos que eres un estudiante de TI. :-) –

Respuesta

10
  • Win32 API - Me olvido de que, si fuera tú. Programar una aplicación de Windows directamente a través de la API de Win32 solo tiene sentido si está programando en C pura, o si realmente necesita hacer muchas llamadas al sistema, o si le preocupa la sobrecarga adicional introducida por más "cómodo" plataformas o marcos (como los nombrados a continuación).La programación de las IU directamente a través de la API de Win32 es fastidiosa, desordenada, y debes lidiar con muchos detalles. Tampoco es independiente de la plataforma en absoluto, pero puede o no estar preocupado por eso.

  • MFC - Tal vez una opción si está programando en C++ y está fijo en la plataforma de Windows. Nunca entendí qué tiene de bueno, aparte de que hace que la API de Win32 sea mucho más cómoda (AFAIK es básicamente una colección de envoltorios orientados a objetos alrededor de la API de Win32 que quitan algo de su complejidad/desorden). Además, tampoco es muy independiente de la plataforma.

  • Qt, wxWidgets - Bastante marcos de interfaz de usuario generalizadas. Podrían ser buenas opciones donde la independencia de la plataforma desempeña un papel. AFAIK ambos marcos están dirigidos al lenguaje C++.

  • WinForms (.NET) - Similar a MFC, esto también se basa en la API Win32 (USER32 y GDI +). AFAIK, el framework de WinForms ahora está siendo portado a Mono, y por lo tanto algo multiplataforma. Sin embargo, no es exactamente la tecnología más actualizada. Para IU complejas, a veces también puede ser algo lento. Si tuviera que decidir hoy qué marco de usar, prefiero elegir ...:

  • WPF (NET) - más moderno que WinForms, con capacidades gráficas más y, al parecer, una representación más rápida, ya que no se basa en la API de Win32 (GDI). (Y se ejecuta en .NET, que me parece una gran plataforma para desarrollar. La programación en C# es mucho más fácil que la programación en C++ en mi humilde opinión, que también es un argumento en contra de Win32 API, MFC, Qt y wxWidgets.) Tenga en cuenta que WPF no es multiplataforma, solo existe en la plataforma de Windows hasta el momento.

  • Luego, por supuesto, está Java, incluidos los marcos de interfaz de usuario que vienen con él. No puedo decir mucho sobre eso ya que no soy una persona de Java, pero podría imaginar que Java sería la mejor opción para la independencia de la plataforma; y es la plataforma dominante (sobre .NET) en ciertas industrias (por ejemplo, teléfonos móviles, banca, debido a la muy sólida JVM y consideraciones de seguridad).

Así mi recomendación sería el marco .NET y WPF para la interfaz de usuario, si usted está planeando quedarse en su mayoría en el mundo Microsoft. Recuerda que aún puedes usar la API de Win32 (no te acercarás más a "llamadas al sistema") a través de P/Invoke.

+0

Mi única pregunta sería: uso WPF y .net, cómo podré implementar el código que hace uso de algo de aritmética pesada, haga uso de pura CPU? ¿Es posible implementar un archivador de archivos usando .net? ¿Tal vez WPF GUI + C++ interopera? – Mack

+0

Bueno, estoy seguro de que hay más de una forma de hacerlo. Podría, por ej. ** (1) ** escriba sus cosas para trabajo pesado en C y compílelo en .DLL, y luego acceda a las funciones dentro de la DLL a través de las capacidades de interoperabilidad de .NET. O ** (2) ** escribe un componente COM (que es básicamente lo mismo que la opción 1, pero orientado a objetos). .NET y COM interactúan bastante bien. ** Pero **, antes de hacer todo eso: podría ser una buena idea ver si la interoperabilidad es necesaria en absoluto, o si sus operaciones de trabajo pesado funcionan lo suficientemente bien cuando están escritas en su lenguaje .NET favorito. – stakx

+4

@Mack - Compruebo C# y hago algunas pruebas para ver qué tan rápido se ejecuta para sus propósitos. Por supuesto, hay algunos gastos generales en un lenguaje administrado, pero a menos que * estreses realmente * la CPU (hasta el punto en que un porcentaje de diferencia de rendimiento significa mucho), es posible que realmente no notes que .NET es mucho más lento. Por supuesto, depende de lo que planeas hacer con él ... –

5

Si te gusta codificar en C# y trabajar con .Net framework, te recomiendo que eches un vistazo a WPF. WPF es un gran marco de GUI donde puedes hacer casi cualquier cosa, ¡y también hacer que brille! WinForms podría ser más fácil de comprender, pero diría que WPF es más "a prueba de futuro". Otra cosa positiva es que WPF es realmente similar a Silverlight, por lo que si maneja bien WPF, también debería poder escribir aplicaciones de Silverlight, si eso le interesa. Por favor, no se moleste en aprender MFC. No puedo creer que haya muchos que estén usando MFC hoy por otras razones que no lo hayan usado antes, y no tuvieron la oportunidad de cambiar ...

There Hay muchos buenos trabajos para los programadores de .Net, por lo que será útil manejar un marco de GUI además de C# y el conocimiento general sobre .Net Framework.

Cuando se trata de sus puntos acerca de ser capaz de "ofrecer algún rendimiento como archivadores, algoritmos criptográficos, códecs", esto realmente no debería depender de su elección del marco de GUI. Este tipo de código se escribirá en capas fuera de la capa de la GUI y, por lo general, estará vinculado a la GUI. Con WPF deberías escribir tu p. Ej. algoritmos criptográficos en C# en alguna clase independiente de la capa GUI, y luego la Vista escrita en WPF se uniría al código C# y obtendría su respuesta de aquí. Sin embargo, si usa WinForms, seguirá haciendo lo mismo y el rendimiento dependerá de los algoritmos, no de la GUI.

Cuando se trata de comenzar con WPF, hay muchas preguntas sobre SO que ayudan con esto. Así que deberías encontrar una buena ayuda con una búsqueda rápida.

¡Buena suerte!

+0

Bueno, gracias por la respuesta. WPF parece agradable. Pero no entiendo "Este tipo de código se escribirá en capas fuera de la capa de la GUI y, por lo general, estará vinculado a la GUI". parte. ¿Quiere decir que escribo la GUI usando WPF por separado y el código usando la potencia bruta de la CPU por separado y de alguna manera mágicamente los vinculan entre sí? Esto implica usar C++ no administrado e interoperabilidad? – Mack

+0

Sin C++ no administrado, sin interoperabilidad, a menos que lo desee. Sin magia realmente Considere que escribe una clase en C# manejando sus algoritmos pesados. Ahora puede escribir una aplicación de consola que muestre el resultado, o puede escribir una aplicación WPF. El rendimiento depende de la biblioteca de clases que maneja sus algoritmos, no de la GUI que muestra el resultado. El rendimiento en la GUI es principalmente relevante cuando se trata de animaciones y material gráfico de lujo, y esto se maneja muy bien en WPF. – stiank81

+0

Gracias. Elegiré la ruta C# + WPF. Ambos son lo suficientemente agradables, las nuevas tecnologías y todo.No estaba seguro de si C# puede ofrecer un rendimiento suficiente cuando se trata de programas de escritorio. – Mack

Cuestiones relacionadas